LeetCode动态规划类题目详解java语言

在刷LeetCode,遇到动态规划的题目就头大,边做边详细记录下~难度比较大,先从easy难度开始


53Maximum Subarray

最大子数组,给定一个整数数组nums,找到其中和最大的连续的子数组,并返回它们相加的和。例子:

Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.


该题解答的思想主要为用两个变量,一个变量maxSoFar记录全局目前为止的最大和,另一个变量maxEndingHere记录该串目前为止最大和,若maxEndingHere超过了maxSoFar,则更新maxSoFar的值为maxEndingHere的值。具体可见下面的例子

cbmbbz的解法
public static int maxSubArray(int[] A) {
    int maxSoFar=A[0], maxEndingHere=A[0];//maxSoFar为到目前为止,出现过的连续子数组中和的最大值,maxEndingHere为当前串截止到当前数字之前和的最大值
    for (int i=1;i<A.length;++i){
    	maxEndingHere= Math.max(maxEndingHere+A[i],A[i]);//比较当前数字是加上该串之前的数字更大,还是不加更大,//其实也就是判断该数字前的和是正数还是负数,如果是正数,就加上,是负数会拖累自己,就甩掉之前的从头开始
    	maxSoFar=Math.max(maxSoFar, maxEndingHere);//看看当前串的值有没有超过最大值,超过了则对最大值进行更新。
    }
    return maxSoFar;
}





猜你喜欢

转载自blog.csdn.net/weixin_39525565/article/details/80036361