Leetcode刷题:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)

1.分析

其实做这道题只需要找出一定的规律就可以解决了,不想写密密麻麻的字了太多,看着也头晕眼花,简单点看下图吧,nums表示原数组,dp表示以nums[n]结尾的最大子系列之和的值。 

以上图片中的dp[n -1] > nums[n] 应该改为dp[n -1] > 0 的时候

 2.代码如下

package 求整数的子系列连续的最大和;
//复杂度O(n)动态规划
public class wordO1 {

    public static int res(int[] nums) {
        int temp = nums[0];
        for (int i = 1; i < nums.length; i++) {
            //使用Math函数中的max()方法来比较nums[i - 1]是否大于0 ,大于与nums[i]相加,不大于0,直接输出nums[i]
            nums[i] += Math.max(0, nums[i - 1]);
            temp = Math.max(temp, nums[i]);//输出所有子系列和中的最大的值
        }
        return temp;//输出结果
    }
}

 3. 结语

以上的空间复杂度为O(n),主要用的是动态规划的方法来解答的,其实还有一种暴力解法,就是新开一个新数组就像上图一样,用来存储最大和的值,具体就不在这写了,有兴趣的小伙伴可以直接思考一下。

 

おすすめ

転載: blog.csdn.net/weixin_51012090/article/details/120800790