Problem Description:
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.
Follow up:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
Analysis:
时间复杂度是O(n),需要遍历整个序列,通过不断叠加整个序列运用贪心算法的思想,在每一步叠加中使得和的值都为最大值,从而求出最大的求和值
Code:
class Solution {
public int maxSubArray(int[] nums) {
int maxSum = Integer.MIN_VALUE;
int tempSum = 0;
for(int i = 0; i < nums.length; i++) {
if(i == 0) {
tempSum = nums[i];
} else {
if(tempSum + nums[i] < nums[i]) {
tempSum = nums[i];
} else {
tempSum += nums[i];
}
}
maxSum = tempSum > maxSum ? tempSum : maxSum;
}
return maxSum;
}
}