Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [−2,1,−3,4,−1,2,1,−5,4]
,
the contiguous subarray [4,−1,2,1]
has the largest sum = 6
.
这道题还是比较水的,设定两个指针,start,end分别指向目前选定子串的头部和尾部,tmp为子串的和,max保持当前遍历过的子串的最大值。
每次循环end向后移动一次,假如tmp为负,则让start指向end的后面一位,tmp清零。
这里要注意数组中所有数字都为负的情况,每次tmp为负,都要看当前数字是不是最大值。
public class Solution {
public int maxSubArray(int[] nums) {
int start,end,max,tmp;
for(start = 0,end = 0,max = nums[0],tmp = 0; end < nums.length ; end ++){
tmp += nums[end];
if(tmp < 0 && end != nums.length-1){
start = end+1;
tmp =0;
if(nums[end] > max)
max = nums[end];
continue;
}
if(tmp > max)
max = tmp;
}
return max;
}
}
做完之后发现此题的标签中有DP,想必指的是子串的求和部分有动规的思想吧