Given an integer array nums
, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
A subarray is a contiguous part of an array.
Example 1:
Input: nums = [-2,1,-3,4,-1,2,1,-5,4] Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6.
Example 2:
Input: nums = [1] Output: 1
Example 3:
Input: nums = [5,4,-1,7,8] Output: 23
Constraints:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
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,我们只需要关心截止前一个元素的最大值,如果截止前一个元素最大值大于0 那我们就加它,否则的话不加
class Solution { public int maxSubArray(int[] nums) { int[] result = new int[nums.length]; result[0]=nums[0]; int max = result[0]; for(int i=1;i<nums.length;i++){ result[i] = nums[i] + ( result[i-1] >= 0 ? result[i-1] : 0 ); max = Math.max(max,result[i]); } return max; } }
空间优化:
class Solution { public int maxSubArray(int[] nums) { int max = nums[0]; int sum = nums[0]; for(int i=1;i<nums.length;i++){ sum = nums[i] + ( sum >= 0 ? sum : 0 ); max = Math.max(max,sum); } return max; } }