您的位置:首页 > 其它

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

2018-11-18 21:06 2266 查看

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],

输出: 6

解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

代码详解:

[code]public class Solution {

public int maxSubArray(int[] nums) {

int len = nums.length;

if (len == 0) {

return 0;
}

int[] dp = new int[len];

dp[0] = nums[0];

for (int i = 1; i < len; i++) {

dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);

}

// 最后这一步,是求一个全局的最优值
int res = dp[0];

for (int i = 1; i < len; i++) {

res = Math.max(res,dp[i]); } return res;

}
}

算法详解:

                  解析:dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);

                  dp[i]      nums[i]     dp[i - 1] + nums[i]

                    1           1                -1

                    -2          -3               -2

                    4            2                4

                    3            -1               3 

                    5            2                5

                    6            1                5

                    ........

通过该条代码得到前 i 个最大和,存储到dp[]中,用dp[]数组存储最大的数组数和,最后遍历该数组即可得到该数

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐