原题:Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
寻找子数组的最大值
思路:对于一个确定的子数组最大值来说,它一定满足:以其开头左边元素为末尾的任何一段子数组的和都小于0;若存在一段大于0的,则最大子数组就可以延长;
所以设置一个变量,用于实时更新数组现在的和,记为sum,当sum小于0时,sum置为0;意为可以舍弃之前的部分,重新开始记录;
代码:
public class Solution {
public int maxSubArray(int[] nums) {
int res=Integer.MIN_VALUE;
int sum=0;
for(int i=0;i<nums.length;i++){
if(sum<0){
sum=0;
}
sum+=nums[i];
res=res>=sum?res:sum;
}
return res;
}
}