leetcode53——最大子序和——java实现

分析:
这道题目使用动态规划来做。
我们设置两个变量,一个为result,用来存放最终结果,一个为sum,用来存放当前的和。
每次得到sum时,与result进行比较,取大的那个当作最终result值。

那么我们如何求sum呢?
在示例中,我们可以看到,nums数组中的数字有正有负。我们要找到连续数字的最大和,就必须要对nums数组进行遍历。
在遍历的时候,分两种情况:

  1. 如果此时的sum值大于0,就证明是可能有正的增益的,此时将nums[i]的值加上,对sum值进行更新;
  2. 如果sum值小于0,反正sum都小于0了,就算nums[i]是一个正数,加起来也肯定不是最大和,所以此时sum的也要进行更新,其值就等于现在的nums[i]。

具体代码如下:

class Solution {
    public int maxSubArray(int[] nums) {
        int result = nums[0];
        int sum = 0;
        for(int i = 0; i < nums.length; i++) {
            if(sum > 0) {
                sum += nums[i];
            } else {
                sum = nums[i];
            }
            result = Math.max(result, sum);
        }
        return result;
    }
}

你可能感兴趣的:(leecode)