[数字技巧]最大连续子序列和
2013-09-09 12:48
302 查看
最大连续子序列和这个问题是一个比较常见的问题,出现在很多公司的面试笔试中。题目大概是这样描述的:
输入一个整形数组,数组中有正数也有负数,数组中连续一个或多个组成一个子序列,每个子序列都有一个和,求所有子序列的和的最大值。
一、暴力枚举
最暴力的解法是枚举起点和终点(或长度),连同求和的那个步骤,共三个for循环,复杂度是O(n3)。代码示例如下:
View Code
这是一个线性时间常量空间的算法,最大的特点是一旦读入arr[i]就被立即处理,不再被记忆,这就是所谓的联机算法。
四、巧妙解法的两个改进
改进一、这种算法在数组中所有的数为负数时,是得不到正确结果的,通过对负数单独讨论,满足全负数情形;
改进二、在计算的过程中忽略了起始位置和终点位置,可通过做两次标记,保存起点和终点位置。
这里直接给出一道类似的题目,具体不在赘述。
/article/5796794.html
输入一个整形数组,数组中有正数也有负数,数组中连续一个或多个组成一个子序列,每个子序列都有一个和,求所有子序列的和的最大值。
一、暴力枚举
最暴力的解法是枚举起点和终点(或长度),连同求和的那个步骤,共三个for循环,复杂度是O(n3)。代码示例如下:
int solve3(int *arr,int n) { long max = 0; long total = 0; for(int i=0; i<n; i++){ total += arr[i]; if(total > max) max = total; else if(total < 0) total = 0; } return max; }
View Code
这是一个线性时间常量空间的算法,最大的特点是一旦读入arr[i]就被立即处理,不再被记忆,这就是所谓的联机算法。
四、巧妙解法的两个改进
改进一、这种算法在数组中所有的数为负数时,是得不到正确结果的,通过对负数单独讨论,满足全负数情形;
改进二、在计算的过程中忽略了起始位置和终点位置,可通过做两次标记,保存起点和终点位置。
这里直接给出一道类似的题目,具体不在赘述。
/article/5796794.html
相关文章推荐
- 【基础练习】【线性DP】codevs2622 数字序列(最大连续子序列和)题解
- 【基础练习】【线性DP】codevs2622 数字序列(最大连续子序列和)题解
- codevs2622数字序列( 连续子序列最大和O(n)算法)
- 最大连续子序列 简单dp
- hdu 1231 最大连续子序列
- 最大连续子序列
- 九度OJ:1011 最大连续子序列
- dp_1: 最大连续子序列之和
- HDU 1231:最大连续子序列(DP)
- 【练习09】简单动态规划 1001 最大连续子序列
- ACM—最大连续子序列(HDOJ1003)
- HDU 1231最大连续子序列(周赛F题)
- 最大连续子序列和
- 最大连续子序列-最基础的DP
- HDU 1231 最大连续子序列 &&HDU 1003Max Sum (区间dp问题)
- HDU 1231 最大连续子序列 DP题解
- hdu 1231 最大连续子序列(水题)
- 动态规划经典题目:最大连续子序列和
- 最大连续子序列和
- zoj1003-Max Sum (最大连续子序列之和)