【有趣的面试算法题】之三 求最大子序列和/积问题,关注起点和终点
2013-08-20 13:20
351 查看
最大子序列和的问题,网上讨论得比较多,较为推崇的复杂度为O(n)的算法:
关于最大乘积,这里给了一个比较好的 http://764293072.diandian.com/post/2011-09-23/5250369
int maxSubSum(int* a, int n, int *seqStart=0, int *seqEnd=0) { int maxSum = 0; int thisSum = 0; for( int i = 0, j = 0; j < n; j++ ) { thisSum += a[ j ]; if( thisSum > maxSum ) { maxSum = thisSum; *seqStart = i; *seqEnd = j; } else if( thisSum < 0 ) { i = j + 1; thisSum = 0; } } return maxSum; }
关于最大乘积,这里给了一个比较好的 http://764293072.diandian.com/post/2011-09-23/5250369
//找到长度为n的arr数组中最大的连续积 long long FindMax(int arr[], int n){ if(n <= 0)return 0; long long result = arr[0]; //存储当前最大值 long long tmp = 1; //存储当前序列积 //从左往右扫描 for(int i = 0; i < n; i++){ tmp *= arr[i]; if(tmp == 0){tmp = 1;continue;} if(tmp > result)result = tmp; } //从右往左扫描 tmp = 1; for(int i = n-1; i >= 0; i--){ tmp *= arr[i]; if(tmp == 0){tmp = 1;continue;} if(tmp > result)result = tmp; } return result; }
相关文章推荐
- 算法(一):最大子序列和问题的多种求解(打印子序列)
- 求解最大子序列和问题的线性时间算法
- (hdu step 3.2.1)Max Sum(简单dp:求最大子序列和、起点、终点)
- 算法分析学习日志(二):最大子序列和问题
- 【数据结构与算法】最大子序列和问题的求解
- 【算法与数据结构】最大子序列和问题
- 【算法】—— 最大子序列和问题
- 算法笔记1-最大子序列和问题的求解
- 算法与数据结构——最大子序列和问题
- 算法问题(1)最大子序列问题
- 算法笔记1-最大子序列和问题的求解
- 最大子序列和问题以及确定序列起终点位置
- [算法学习笔记]分治法——最大子序列和问题
- 【算法】最大子序列和问题
- HDU1003 Max Sum 最大子序列和的问题【四种算法分析+实现】
- 算法 :最大子序列和问题
- Max Subsequence Sum 最大子序列和问题 O(NlogN)与O(N)算法的对比
- 最大子序列和问题 算法
- 算法的艺术--最大子序列和问题
- 2、最大子序列和问题的四个算法