最大子序列和

原创 2018年04月16日 21:25:11

给定整数A1, A2, …, AN,求子序列和的最大值。(为了方面起见,如果所有整数均为负数,则最大子序列和为0)

算法1:时间复杂度O(N^2)

    public static int maxSubSum1(int[] a){
        int maxSum = 0;
        for (int i = 0; i < a.length; i++) {
            int thisSum = 0;
            for (int j = i; j < a.length; j++) {
                thisSum += a[j];
                if (thisSum > maxSum) {
                    maxSum = thisSum;
                }
            }
        }
        return maxSum;
    }

算法2:时间复杂度O(N)

如果a[i]是负的,那么它不可能代表最优序列的起点,因为任何包含a[i]作为起点的子序列都可以通过a[i+1]作起点而得到改进。任何负的子序列不可能是最优子序列的前缀。

    public static int maxSubSum2(int[] a){
        int maxSum = 0, thisSum = 0;
        for (int i = 0; i < a.length; i++) {
            thisSum += a[i];
            if (thisSum > maxSum) {
                maxSum = thisSum;
            } else if (thisSum < 0) {
                thisSum = 0;
            }
        }
        return maxSum;
    }

在一般情况下,如果所有整数均为负数,则最大子序列和为数组中的最大值。

    public static int maxSubSum(int[] a){
        int maxValue = a[0];
        boolean allNegative = true;
        for(int i = 0; i < a.length; i++){
            if(a[i] > maxValue){
                maxValue = a[i];
            }
            if(a[i] >= 0){
                allNegative = false;
            }
        }
        return allNegative ? maxValue : maxSubSum2(a);
    }




版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuzhenya1994/article/details/79965661

最大子序列和问题四种算法源代码

  • 2017年03月10日 10:04
  • 1.64MB
  • 下载

用分治法求最大子序列问题,时间复杂度O(N*logN)

package Test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream...
  • u011930705
  • u011930705
  • 2017-04-02 18:31:08
  • 408

最大子序列求和动态规划

  • 2011年05月17日 09:20
  • 429B
  • 下载

编程之美 - 二维数组最大和的子序列

问题描述: 找出二维数组中的最大和的子序列。二维数组中的子序列是二维数组中的一个方块。 思路一: 使用暴力的方式,从每一个元素开始,变量以它为左上定点的所有的可构造的方块。 时间复杂度...
  • wangzhiyu1980
  • wangzhiyu1980
  • 2016-05-25 10:06:31
  • 1099

最大子序列和问题以及确定序列起终点位置

在学习数据结构遇到的第一个问题就是一个最大子序列和的问题,以PAT(点击打开链接)上的一道题作为例子来总结一下求解这类问题时一些常用的方法。网上讲述子列和问题的博客及文章已经很多了,这里就不在阐述穷举...
  • u012745215
  • u012745215
  • 2015-01-31 19:14:30
  • 1381

最大连续子序列之和(动态规划)

1. 问题描述 设n个元素的序列存储在数组A[0..n-1]中,求数组中连续子序列之和的最大值。 2. 递推公式 设All[i]为子问题A[i..n-1]的连续子序列之和的最大值,sta...
  • songuooo
  • songuooo
  • 2012-08-08 14:43:59
  • 2563

java求最大子序列的和的问题

昨天去oracle面试,面试官很负责,先做笔试,四道题,做的不是很顺利,现在回来mark学习,革命尚未成功,同志仍需努力!加油! import java.util.Scanner; /** ...
  • mm_bit
  • mm_bit
  • 2015-11-24 18:12:31
  • 433

求最大子序列和的四种经典方法及其算法时间复杂度分析

本文程序介绍求最大子序列和的四种经典方法: //四种算法 //算法一 //算法4 int MaxSubsequenceSum4(const int A[], int N) {     int This...
  • rjp609206160
  • rjp609206160
  • 2016-02-17 10:17:16
  • 321

分治策略结合递归思想求最大子序列和

对于 《数据结构与算法分析——C语言描述》 一书第 20 页所描述的算法 3,相信会有很多人表示不怎么理解,下面我由具体问题的求解过程出发,谈谈我自己的理解: 首先,什么是分治法呢?所谓 分治法,...
  • gcvdsvb
  • gcvdsvb
  • 2014-06-30 19:50:44
  • 2750

最大子序列的不同时间复杂度算法

1.求一个序列的最大子序列和的算法时间复杂度为O(n^3),即枚举算法,也就是说:将原序列的每个子序列枚举出来并求和,最后从中找出一个最大值,算法如下:         long maxSubS...
  • wenlovingliu
  • wenlovingliu
  • 2013-06-27 10:03:57
  • 1014
收藏助手
不良信息举报
您举报文章:最大子序列和
举报原因:
原因补充:

(最多只允许输入30个字)