LeetCode - 53. 最大子数组 (java实现)

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

示例1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

示例2:

输入:nums = [1]
输出:1

示例3:

输入:nums = [5,4,-1,7,8]
输出:23

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

代码:

    //dp动态规划
    public int maxSubArray(int[] nums) {
        int len = nums.length;
        //用dp数组用来统计前面数之和
        int[] dp = new int[len];
        //先放一个元素
        dp[0] = nums[0];
        //循环求和
        for(int i = 1; i < len; i++){
            //如果是正数,就累加到一起,放到dp对应的位置
            if(dp[i-1] > 0){
                dp[i] = dp[i-1]+nums[i];
            }else{
                //负数直接对应赋值就可以了
                dp[i] = nums[i];
            }
        }
        int max = dp[0];
        //找出dp中最大的那个数
        for(int i = 1; i < len; i++){
            max = Math.max(dp[i],max);
        }
        return max;
    }


版权声明:本文为m0_52066789原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。