美文网首页
求最大子序列和

求最大子序列和

作者: overflow_e4e4 | 来源:发表于2019-11-07 14:19 被阅读0次

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

解法大概分三种:

  1. 穷举
    耗时O(n2)不赘述。
  2. 动态规划
 public int maxSubArray(int[] nums) {
        int[] dp = new int[nums.length];
        dp[0] = nums[0];

        for (int i = 1; i < nums.length; i++) {
            //状态转移方程
            dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);
        }
        //dp[i]存放以A[i]结尾的连续序列的最大和,需要遍历i得到最大的才是结果
        return Arrays.stream(dp).max().getAsInt();
    }
  1. 根据特殊规律
public int maxSubArray2(int[] nums) {
        int lastSum = 0, sum = nums[0];
        for (int num : nums) {
            lastSum += num;

            if (lastSum > sum) {
                sum = lastSum;
            }
            if (lastSum < 0) {
                lastSum = 0;
            }
        }
        return sum;
    }

忽略了对子序列的寻找比较,而是根据规律直接找出最佳答案。

对于含有正数的序列而言,最大子序列肯定是正数,所以头尾肯定都是正数,我们可以从第一个正数开始算起,每往后加一个数便更新一次和的最大值,当当前和成为负数时,则表明此前序列无法为后面提供最大子序列和,因此必须重新确定序列首项。

相关文章

  • 刷算法题:求一个序列的最大子序列之和!

    求一个序列的最大子序列之和! 不是求最大子序列之和嘛!我脑子居然就一直关注到了最大子序列上去了,导致我想着实现代码...

  • 递归求最大子串序列长度

    递归求最大子串序列长度 运行结果

  • 求最大子序列和

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

  • 2018-07-25

    求最大子序列和问题的四种算法 定义:给定整数A_{1},A_{2},A_{3},……,A_{N}(可能有复数),求...

  • 算法导论:最大子序列和

    算法导论:最大子序列和 问题描述:什么是最大子序列和呢?就是给定一组序列,所有子序列中和最大的那一组序列。比如这里...

  • 最大子序列和问题(C语言)

    最大子序列和(maxSubSeqSum) 时间复杂度:T(N)=O(N3) 最大子序列和改进1(maxSubSeq...

  • 最大子序列解析

    最大子列和问题 给定N个整数的序列{A1, A2 ... An},求函数 f(i, j) = max{0, 从i到...

  • 最长子序列问题

    最大子序列最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是 {5...

  • 最大子列和问题的4种复杂度算法

    定义:给定个整数的序列 ,求函数 的最大值(若最大子列和为负数,则返回0)。 算法1——int MaxSubSeq...

  • 动态规划

    求最大子数组,最大子乘积

网友评论

      本文标题:求最大子序列和

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