前段时间看《算法导论》了解到最大子数组问题,但没有做习题,遗漏了一些重要的知识,现在《编程珠玑》上看到完整的讲解,还有一些算法技巧,故记录于此。1.定义问题在数组中找出元素之和最大的子数组,假定当数组元素全部为负数时,最大子数组是空数组,和为0。2.解决问题令数组为x[n],最大子数组下标为[p,q...
分类:
编程语言 时间:
2015-03-11 21:13:58
阅读次数:
150
题目简述:购买一家股票,给若干股票不同时期预期价位,让你判断何时买何时抛可以获得最大收益。输入:各时期价位总数n以及每个价位。输出:最大收益以及买和投的时间(时期简单记为1-n)。解题思路A:O(n)考虑价位变化。由输入数据可以得到每次价位变化值a2-a1,并依次求和count,根据count是否为...
分类:
编程语言 时间:
2015-02-26 20:12:42
阅读次数:
183
寻找数组A的和最大的非空连续子数组。例如:int A[] = {1, -2, 3, 10, -4, 7, 2, -5}的最大子数组为3, 10, -4, 7, 2,其最大和为18。方法1:枚举所有子数组并求出他们的和。长度为n的数组有O(n2)个子数组(即:n + n-1 + ... + 1=n(n...
分类:
编程语言 时间:
2015-01-05 10:59:23
阅读次数:
184
在算法导论4.1最大子数组问题中首先提出的是暴力求解方法即计算所有子数组的组合,然后求其和,寻找最大值。这种方法运行时间为Ω(n^2)。然后提出有没有更好的方法。使用分治策略的求解方法:寻找子数组A[low..high]的最大子数组,使用分治技术意味着要将子数组划分为两个规模尽量相等的子数组。也就是...
分类:
编程语言 时间:
2014-12-24 16:06:36
阅读次数:
307
在第四章分治策略(Divider and Conquer)4.1节提出了最大子数组问题。其转化就是求数组a={1, -2, 3, 10, -4, 7 , 2, -5}中连续子数组的最大和。对于这个问题,很容想到一种暴力求解的方法:简单地尝试对所有可能的的组合进行求和。对数组为n存在n*(n-1)/2...
分类:
编程语言 时间:
2014-12-23 12:05:21
阅读次数:
306
TODO: 动态规划到底是个什么玩艺?ref:http://www.cnblogs.com/waytofall/archive/2012/04/10/2439820.htmlI 只考虑怎样产生更大的子组和:假设处理到第i个节点时:1. 考虑是否i节点是否可使子组的和变大 a) 如果i节点大于0,则....
分类:
编程语言 时间:
2014-11-14 01:32:42
阅读次数:
200
/*------------------ 求解最大子数组问题 --------------- 最大子数组,就是求解一个数组的所有元素的各种组合中,和最大的那个子数组。在这种情况下,如果元素值全部非负,那么最大子数组当然是所有元素。但是如果有负值的元素存在,那么久需要找到一个由数组中连续几个...
分类:
编程语言 时间:
2014-11-02 20:48:31
阅读次数:
324
最大子数组问题方法一:暴力求解方法我们可以很容易地设计出一个暴力方法来求解本问题:简单地尝试没对可能的子数组,共有O(n2)种#includeusing namespace std;#define INT_MIN 0x80000000int main(){ int arr[10]={9,8,-...
分类:
编程语言 时间:
2014-11-01 21:45:16
阅读次数:
296
求连续子数组的最大和求子数组的最大和题目描述:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。例如输入的数组为1,-2,3,10,-4,7,2,-5,和最大的子数组为3,10,-4,7,2,因此输出为该子..
分类:
编程语言 时间:
2014-10-15 04:42:20
阅读次数:
240