取数组中和最大的一段连续序列
2014-05-15 11:42
288 查看
问题:
已知有一数组整型array
,其中N很大,array数组中存在正数、负数和0。求其实位置start和end,使得array[start]到array[end]所有元素之和最大。
算法过程:
1、初始化start、end、p、q为array数组的第一个元素位置,初始化max为array[0],sum为array[0];
2、计算sum = sum+array[q],若p等于q,则sum = sum/2;
3、若Max小于sum,则令Max为sum,start为p,end为q,q后移一位。否则,若sum小于等于0,则q后移,直到array[q]大于0时(若q之后的元素均小于等于0,则退出程序),令p等于q,sum等于array[p],若sum大于0,则q后移一位。
4、若q >= N,则退出程序,start即为找到的起始位置,end即为终止位置,Max即为最大值。否则,转第2步。
算法时间复杂度分析
以q后移为算法的基本步骤,算法的时间复杂度为O(n)。
已知有一数组整型array
,其中N很大,array数组中存在正数、负数和0。求其实位置start和end,使得array[start]到array[end]所有元素之和最大。
算法过程:
1、初始化start、end、p、q为array数组的第一个元素位置,初始化max为array[0],sum为array[0];
2、计算sum = sum+array[q],若p等于q,则sum = sum/2;
3、若Max小于sum,则令Max为sum,start为p,end为q,q后移一位。否则,若sum小于等于0,则q后移,直到array[q]大于0时(若q之后的元素均小于等于0,则退出程序),令p等于q,sum等于array[p],若sum大于0,则q后移一位。
4、若q >= N,则退出程序,start即为找到的起始位置,end即为终止位置,Max即为最大值。否则,转第2步。
算法时间复杂度分析
以q后移为算法的基本步骤,算法的时间复杂度为O(n)。
相关文章推荐
- 给一个数组,元素都是整数(有正数也有负数),寻找连续的元素相加之和为最大的序列。
- 寻找数组中和最大的子序列
- 求一个数组中序列连续数的最大值
- 算法-子数组连续序列最大和其时间复杂度如何从O(n^3)到O(n)
- 一个整形数组中有正数也有负数,数组中连续一个或多个组成子数组,每个子数组都有一个和,求所有子数组中和的最大值
- leecode 连续数组中和最大路径
- 一个整形数组中有正数也有负数,数组中连续一个或多个组成子数组,每个子数组都有一个和,求所有子数组中和的最大值
- 最大子数组和(最大子序列和 | 连续子数组最大和)(转)
- 求数组中和最大的子数组并输出子数组序列
- 最大子数组和(最大子序列和 | 连续子数组最大和)
- 剑指offer 面试题41 递增数组中和为s的两个数字 | 和为s的连续整数序列
- 数组连续子序列的最大和&最大积
- 一个整形数组中有正数也有负数, 数组中连续一个或多个组成子数组,每个子数组都有一个和, 求所有子数组中和的最大值
- 求数组中和最大子序列
- 找一个数组的最大上升子序列(允许不连续)
- 求数组中和最大的子序列
- 关于如何查找数组中和最大的子序列
- Magical GCD UVA 1642 利用约数个数少来优化 给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量的值最大。输出这个最大值。
- 如何查找数组中和最大的子序列
- 给定一个数组,当中有正负数,求当中的一段“子数组”(即任意长度,连续的数字), 使得这个“子数组”的和是所有“子数组”和中最大的