给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
思路:每个循环中,sum表示以nums[i]结尾的最大子序和,res表示目前得到的最大子序和。当循环结束,res就是最终结果。
class Solution {public int maxSubArray(int[] nums) {int sum = 0;int res = nums[0];for(int i = 0;i<nums.length;i++){sum = Math.max(nums[i],sum+nums[i]);//sum表示以nums[i]结尾的最大子序和res = Math.max(res,sum);//res表示目前得到的最大子序和}return res;}
}
1.sum = Math.max(nums[i],sum+nums[i])
当前以i结尾的最大子序和,是在前者基础上比较得来的,要么nums[i]单独做为sum,要么加上上一个sum
2.res = Math.max(res,sum)
res比较好理解,就让他一直成为当前“老大”就行了