题目描述
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Example:
Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
解题思路
使用一个sum标记和大于0的子串的和的大小,如果小于0,则为0 。
因为要求的是最大的子串和,如果sum < 0 的话,对结果没有好的影响,置位0意味着之前的数字将会被舍弃。
同时要比较ans和sum+nums[i]的大小,返回较大的那一个。
代码实现(Java)
class Solution {
public int maxSubArray(int[] nums) {
int sum = nums[0];
int ans = sum;
for(int i = 1; i < nums.length; i++) {
/*
//这一部分是考虑将sum置为0,然后比较ans和sum的大小
sum += nums[i];
if(sum < 0) {
sum = 0;
}
else {
ans = Math.max(sum, ans);
}
*/
//这一步是直接省去了将sum置0的操作,通过比较之前子串之和加上当前数字 与 当前数字 的大小,返回较大的一个。
//如果之前的sum小于0,则必然会返回当前数字,即意味着之前的数字都被抛弃了,sum值改变
sum = Math.max(nums[i], nums[i] + sum);
ans = Math.max(sum, ans);
}
return ans;
}
}