版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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.
使用动态规划的方法:使用记忆数组dp记录当前元素连续子串的最大值,如果和前面的dp相加大于当前元素值,则和前面的子串链接,否则,当前元素自己成为一个子串的开始。
-2 | 1 | -3 | 4 | -1 | 2 | 1 | -5 | 4 |
-2 | 1 | -2 | 4 | 3 | 5 | 6 | 1 | 5 |
class num53 {
public int maxSubArray(int[] nums) {
if(nums.length == 0) return 0;
int[] dp = new int[nums.length];
int max = nums[0];
dp[0] = nums[0];
for(int i=1; i<nums.length; i++){
if(dp[i-1] + nums[i] > nums[i]) {
dp[i] = dp[i-1] + nums[i];
}else{
dp[i] = nums[i];
}
max = dp[i] > max? dp[i]:max;
}
return max;
}
public static void main(String[] args) {
int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
num53 solution = new num53();
System.out.println(solution.maxSubArray(nums));
}
}