编程语言
首页 > 编程语言> > Kadane 算法

Kadane 算法

作者:互联网

53. Maximum Subarray Easy

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:

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;
    }
}

 

 

标签:nums,int,max,sum,算法,result,Kadane,Input
来源: https://www.cnblogs.com/cynrjy/p/15914440.html