美文网首页
42.连续子数组的最大和(简单)

42.连续子数组的最大和(简单)

作者: 今天柚稚了么 | 来源:发表于2020-02-18 14:19 被阅读0次

考点:本题考查时间效率

题目描述

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)
输入: array= [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

思路一:举例分析数组的规律

从前往后遍历,最大的连续子序列的和是由当前元素和之前的最大连续子序列的和叠加在一起形成的。如果之前的最大连续子序列的和大于零,我们可以继续累加,如果小于零,则需要舍去之前的子序列,重新从当前的数字开始累加。时间复杂度为O(n)

public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        if(array==null||array.length<=0)
            return 0;
        int len = array.length;
        int sum = 0;
        int ans = array[0];
        for(int i=0;i<len;i++){
            if(sum>0){
                sum+=array[i];
            }
            else{
                sum=array[i];
            }
            ans = Math.max(ans,sum);
        }
       return ans;
    }
}

思路二:动态规划

f(i)表示以第i个数字结尾的子数组的最大和,递归公式求解f(i)
当i=0或者f(i-1)<=0时,f(i)=array[i]
当i!=0或者f(i-1)>0时,f(i)=f(i-1)+array[i]
我们想要的结果是max[f(i)]

public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        int len = array.length;
        int dp[] = new int[len];
        dp[0] = array[0];
        int max = array[0];
        for(int i=1; i<len; i++){
            int Mmax = array[i] + dp[i-1];
            if(Mmax>array[i])
                dp[i] = Mmax;
            else{
                dp[i] = array[i];
            }
            if(dp[i]>max){
                max = dp[i];
            }
        }
        return max;
    }
}

相关文章

  • 剑指 Offer 42 连续子数组的最大和

    剑指 Offer 42. 连续子数组的最大和[https://leetcode-cn.com/problems/l...

  • 42.连续子数组的最大和(简单)

    考点:本题考查时间效率 题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话...

  • 动态规划

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

  • LeetCode 每日一题 [62] 连续子数组的最大和

    LeetCode 连续子数组的最大和 [简单] 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数...

  • [剑指offer]刷题笔记

    连续子数组的最大和(常见✔) 最小的k个数 数组中出现次数超过一半的数字 数据流中的中位数(难♧) 连续子数组的最...

  • LeetCode 每日一题 [25] 最大子序和

    LeetCode 最大子序和 [简单] 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包...

  • DAY6 连续子数组最大和

    剑指Offer 42:连续子数组最大和 Leetcode 53. Maximum Subarray 思路比较简单:...

  • 连续子数组的最大和和子数组

    网上多见的是输出连续子数组的最大和,此代码还额外输出了最大和对应的子数组。代码如下:

  • 最大子序和

    题目 难度级别:简单 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回...

  • 2022-02-26最大子数组的和

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

网友评论

      本文标题:42.连续子数组的最大和(简单)

      本文链接:https://www.haomeiwen.com/subject/ivtlfhtx.html