leetcode 53:最大子序和

152 阅读1分钟

题目:

  • 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

  • 注意,子序,是有序的.

解法逻辑

  • 迭代获取每一个元素 num[i]
  • sum 类承接每一个num[i] 或者 num[i]+sum 的结果,这是在loop体内完成的;
  • result 承接每次最新的累加结果, 当然,这一步也是需要做一个比较的,sum值要是大于result,那就用sum值更新result

上代码


class Solution {
    public int maxSubArray(int[] nums) {
        int length ;
        if(nums==null||(length=nums.length)==0){
            return 0;
        }

        int result = nums[0];
        // 取第0 个位置的数
        int sum = nums[0];
        for(int i = 1;i<length;i++){
            // 有可能result + nums[i]以后 ,得到的值,居然比ssum还小,这就不符合我们的初衷,对不对?
            // 这个时候,我们要做一个比较,二者之间,取最大者即可;借助Math.max();
            sum = Math.max(nums[i],sum+nums[i]);

            if(sum>result){
                result = sum;
            }
        }
        return result;
    }
}

ps

  • 这道题,在leetcode 上的level 是easy,不仔细想的话,还真解答不出来;即便觉得自己会了,还是要强加练习

最大子序和.png

todo

  1. 等复习动态规划了,用dp解答一下,我觉得有门;
  2. 等复习 滑动窗口了,用sliding window 解答一下,我觉得有戏;