53 Maximum Subarray

https://leetcode.com/problems/maximum-subarray/description/

给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大。

例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4],
连续子序列 [4,-1,2,1] 的和最大,为 6。
扩展练习:
若你已实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

解题思路:
边界: dp[0] = nums[0]
状态转移方程: dp[i] = max(dp[i-1]+nums[i],nums[i])

class Solution {

    //dp[i]=max(dp[i-1]+nums[i],nums[i])
    public int maxSubArray(int[] nums) {
        int n = nums.length;
        int[] dp = new int[n];
        int max = nums[0];
        dp[0]=nums[0];
        for(int i=1;i<n;i++){
            dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);
            if(dp[i]>max)max = dp[i];
        }
        return max;
    }
}

猜你喜欢

转载自blog.csdn.net/zxiang248/article/details/79781642