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
.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
Subscribe to see which companies asked this question
最大连续公共序列,采用动态规划,O(N)复杂度,优化后O(1)空间复杂度。
public class Solution {
public int maxSubArray(int[] nums) {
if(nums.length == 0) return 0;
int lastSum = nums[0];
int max = lastSum;
for(int i = 1; i< nums.length; i++){
lastSum = lastSum > 0 ? lastSum+nums[i]:nums[i];
max = max > lastSum ? max : lastSum;
}
return max;
}
}