53 Maximum Subarray

53 Maximum Subarray


https://www.youtube.com/watch?v=7J5rs56JBs8



class Solution {
    public int maxSubArray(int[] nums) {
      int[] result = new int[nums.length];
      result[0] = nums[0];
      for(int i = 1; i < nums.length; i++){
        result[i] = result[i-1] > 0 ? result[i-1] + nums[i] : nums[i];
      }
      int max = Integer.MIN_VALUE;
      for(int i = 0; i < nums.length; i++){
        max = Math.max(result[i], max);
      }
      return max;
        
    }
}

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.

 

public int maxSubArray(int[] A) {
        int n = A.length;
        int[] dp = new int[n];//dp[i] means the maximum subarray ending with A[i];
        dp[0] = A[0];
        int max = dp[0];
        
        for(int i = 1; i < n; i++){
            dp[i] = A[i] + (dp[i - 1] > 0 ? dp[i - 1] : 0);
            max = Math.max(max, dp[i]);
        }
        
        return max;
}

 

posted on 2018-08-10 14:36  猪猪&#128055;  阅读(82)  评论(0)    收藏  举报

导航