求数组中任何连续子向量之和
来源:互联网 发布:赫捷 大数据 精准医学 编辑:程序博客网 时间:2024/05/21 14:42
我们有一个数组,里面包含 10个元素:31,-41,59,26,-53,58,97,-93,-23,84 ,如何求出里面最大的连续子向量之和呢?
该程序应该输出下标为X[2,6]之间的和,187为最大。当所有数是正数的时候,问题很容易解决,但是如果包含了负数,可就难了。
有一个迭代算法,采用动态规划的思想:
maxsofar=0;
for(int i=0;i<n;i++)
{
sum=0;
for(j=i;j<n;j++)
{
sum+=x[i];
maxsofar=mas(maxsofar,sum);
}
}
这段代码的时间复杂度是 O(N*N)。
还有一个分治算法,可以将数组分为两半,然后继续分下去,最大值可能在左边一半,也可能是右边一半,也可能跨越左边右边。
float maxsum(l,u)
{
if(l>u) return 0;
if(l==u) return max(0,x[1]);
m=(l+u)/2;
lmax=sum=0;
for(i=m;i>=1;i--)
{
sum+=x[i];
lmax=max(lmax,sum);
}
rmax=sum=0;
for(i=m,u)
{
sum+=x[i];
rmax=max(rmax,sum);
}
return max(lmax+rmax,masum3(1,m),masum3(m+1,u));
这个算法代码比较复杂,但是时间复杂度降低了。
最后一个最重要的是扫描算法,这个算法很不好理解。下面给出伪代码如下:
maxsofar=0;
maxendinghere=0;
for i=0-n;
maxendinghere=max(maxendinghere+x[i],0);
maxsofar=max(maxsofar,maxendinghere);
- 求数组中任何连续子向量之和
- 求最大连续子向量之和
- 求最大连续子数组之和
- 求最大连续子数组之和
- 求数组的连续子数组之和最大
- 求数组的连续子数组之和的最大值
- 求一个向量的任何连续最接近0的子向量的和
- 求输入向量的任何连续子向量中的最大和
- 求输入向量的任何连续子向量的最大和
- C++中求数组连续子向量的最大和(牛客剑指offer)
- 求数组中最大连续子数组
- 找出数组中任何相邻子向量的最大和
- 模式识别-查找向量中元素之和最大的连续子向量
- 模式识别-查找向量中元素之和最大的连续子向量---编程珠玑
- 求一个向量的任何连续子向量的最大和的4种算法实现(简单实例)
- (java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
- (java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
- 求子数组之和最大值
- 明月几时有,自己抬头瞅
- Symbian 基本概念
- 性能卓越!微软正式发布Office 2010
- 数据层级显示(根据代码级次显示名称)
- 标题判断-折叠效果-div弹出窗体
- 求数组中任何连续子向量之和
- Windbg microsoft download address
- 关于FLEX中的隐藏方法(mx_internal)
- SQL2000/2005字符串拆分为列表通用函数
- 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。8000401A的错误解决方法
- 关于java、jsp、servlet、ajax乱码问题
- windows7 下SVN不能正常工作
- client:基于pix router router的IPSec Vpn
- xp+vmware+linux的网络连接