剑指offer连续子数组最大和

2021-03-30 03:26

阅读:499

标签:offer   算法   return   使用   subarray   else   lan   描述   最大和   

题目描述

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。

算法描述

使用动态规划,对于输入的数组nums[],定义数组dp[nums.length],并且dp[i]表示以num[i]为结尾的子数组的和的最大值,则状态转移方程为
* 如果dp[i-1] * 如果dp[i-1]>0,那么可以将前面的数组纳入考量范畴,dp[i] = dp[i-1] + nums[i];
则最终返回的结果为dp[]数组中的最大值,并且对应的子数组为最大值向前直到不为0或负数的相对应的下标,例如

i 0 1 2 3 4 5 6 7 8
nums -2 1 -3 4 -1 2 1 -5 4
dp -2 1 -2 4 3 5 6 1 5

则返回最大和为6,对应下标为3到6的子数组

代码

public int maxSubArray(int[] nums) {
    int[] dp = new int[nums.length];
    int output = Integer.MIN_VALUE;
    for(int i = 0;i0)dp[i] = dp[i-1] + nums[i];
        }
        output = Math.max(dp[i],output);
    }
    return output;
}

剑指offer连续子数组最大和

标签:offer   算法   return   使用   subarray   else   lan   描述   最大和   

原文地址:https://www.cnblogs.com/keke-coding/p/13587391.html


评论


亲,登录后才可以留言!