Java教程

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:

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

 

 

这篇关于Kadane 算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!