码迷,mamicode.com
首页 > 编程语言 > 详细

剑指offer连续子数组最大和

时间:2020-09-11 15:57:45      阅读:40      评论:0      收藏:0      [点我收藏+]

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

题目描述

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

算法描述

使用动态规划,对于输入的数组nums[],定义数组dp[nums.length],并且dp[i]表示以num[i]为结尾的子数组的和的最大值,则状态转移方程为
* 如果dp[i-1]<=0,那么代表前面的子数组对后面的影响不大,可以抛弃不算,则dp[i] = nums[i];
* 如果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;i<nums.length;i++){
        if(i==0)dp[i] = nums[0];
        else{
            if(dp[i-1]<=0)dp[i] = nums[i];
            if(dp[i-1]>0)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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!