问题描述: 输入一组整数,求出这组数字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那个序列。例如:序列:-2 11 -413 -5 -2,则最大子序列和为20。序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,则最大子序列和为16。算法一://穷举法,复杂度O(n^...
分类:
其他好文 时间:
2014-06-27 11:16:14
阅读次数:
212
maxSubSum分别是最大子序列和的4中java算法实现。
第一种算法运行时间为O(N^3),第二种算法运行时间为O(N^2),第三种算法运行时间为O(nlogn),第四种算法运行时间为线性N
测试
public class Test {
public static void main(String[] args) {
int[] a = {-2, 11, -4, 13, -5, -...
分类:
编程语言 时间:
2014-06-24 18:30:19
阅读次数:
284
问题——
给定N个整数(有可能是负数)A1,A2,A3,A4...An,求最大子序列和。
(子序列必须是连续的);比如,对于输入,-2,11,-4,13,-5,-2;这个序列,
答案是20,即从A2到A4。
对于这个问题,你怎么想的呢?下面有四种解法,看看你的解法是不是其中之一。
解法一、穷举
解题思路——
既然是求某一个连续的子序列的最大和,那么我们把所有的子序列的和都加一遍...
分类:
其他好文 时间:
2014-06-22 08:06:08
阅读次数:
237
动态规划的算法:#includeint MaxSubsequenceSum(const int A[],int n){ int i,sum,MaxSum; sum=MaxSum=0; for(i=0;iMaxSum) MaxSum=sum; if...
分类:
其他好文 时间:
2014-06-18 17:56:31
阅读次数:
139
问题
给定整数: A1,A2,…,An,
求∑jk=iAk 的最大值(为方便起见,如果所有的整数均为负数,则最大子序列和为0)
例如
对于输入:-2,11,-4,13,-5,-2,答案为20,即从A2到A4
分析
这个问题之所以有意思,是因为存在很多求解它的算法。...
分类:
编程语言 时间:
2014-06-08 15:42:23
阅读次数:
265
最大连续子序列(HDU1003,1231)
最大递增子序列和,sum[i]=max(sum[j])+a[i],j
最长公共子序列,LCS经典算法(HDU1159)。
题解:
实际上,我没看出hdu1003和1231的本质差别,形式上的差别就是记载的东西不一样,一个是记载下标,一个是记载元素。基本就是那么回事吧。很多算法书在讨论时效都会拿这个例子来说明,让大家看到算法的力量,从一个弱渣算法到...
分类:
其他好文 时间:
2014-06-03 04:19:10
阅读次数:
279
对Big
Oh的新的认识一个问题,它有很多种算法都能实现。每种算法它的时间、空间复杂度不一样。比如:问题1: 求最大连续子序列和的问题,可以有O(n3)、O(n2)、O(nlogn)和O(n)四种时间复杂度的解法。请看下面的代码:一、O(n3)算法 二、O(n2)算法 三、O(nlogn)算法用分治...
分类:
其他好文 时间:
2014-05-26 19:17:41
阅读次数:
234
算法1
用两个for循环定位子序列的上下界,然后再用最内部的一个for循环求出上下界之间的元素和。
时间复杂度:O(N³)。
代码:
int MaxSub(int *a, int n)
{
int sum = 0;
int tmp;
for (int i = 0; i < n; i++)
{
for (int j = i; j <...
分类:
其他好文 时间:
2014-05-25 21:28:44
阅读次数:
243
就拿杭电OJ上的第1003题开始吧,这题比原书要复杂一些。
Problem Description
Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum...
分类:
其他好文 时间:
2014-05-22 07:07:27
阅读次数:
322
题意:最大连续子序列和,在一个数组中找到和最大的连续子数组
思路:dp, 对于第i个数,有两种选择:把它加入在子数组里,不加入子数组(子数组到此结束)
加不加入子数组,要比较它加入前后子数组的总和是变大了还是变小了,如果变大则加入,变小则不加入
所以,我们需要记录以i-1结尾的子数组的总和,最后的结果在这些总和中取最大的那个
f[i] = max(f[i-1]+a[i],f[i-1]);
max({f[i]})
实现时用两个变量,一个保存f[i-1],一个保存目前为止最大的f[i]
复杂度:时间O(n),空...
分类:
其他好文 时间:
2014-05-14 21:53:14
阅读次数:
250