数组中子序列最大和算法
2011-03-18 12:33
267 查看
昨天有同事去别的公司面试,考了这样一道题,说写得不好,问能不能有时间复杂度为数组长度的算法,这个应该不难,写了段代码,执行上应该没错。
int main(int argc, char* argv[]){ int a[]={10,3,-5,16,90,-100,90,6,-7}; int n =sizeof(a)/sizeof(int); int max = 0; int tmpmax = 0; for(int i=0;i<n;i++) { if(tmpmax+a[i]>max) { tmpmax = max = tmpmax+a[i]; } else { tmpmax = tmpmax+a[i]; if(tmpmax<0) tmpmax = 0; } } cout<<"MaxValue: "<<max<<endl; return 0; }嘿嘿,谁能看出那个数组中和最大的子序列是什么?? 应该是最简单的算法了,在网上搜了下,好些人写得有问题,误人子弟啊。
上面是没有考虑全负的情况,修正如下:
int a[]={-10,3,9,-16,-90,-100,-90,6,-7};
int n =sizeof(a)/sizeof(int);
int max = a[0];
int tmpmax = 0;
for(int i=0;i<n;i++)
{
if((tmpmax=tmpmax+a[i])>max)
{
max = tmpmax;
}
else
{
if(tmpmax<0)
{
if(max<0)
if(a[i]>max)
max = a[i];
else
tmpmax = 0;
}
}
}
cout<<"MaxValue: "<<max<<endl;
如果全负实际是做了一遍选择排序。
int main(int argc, char* argv[]){ int a[]={10,3,-5,16,90,-100,90,6,-7}; int n =sizeof(a)/sizeof(int); int max = 0; int tmpmax = 0; for(int i=0;i<n;i++) { if(tmpmax+a[i]>max) { tmpmax = max = tmpmax+a[i]; } else { tmpmax = tmpmax+a[i]; if(tmpmax<0) tmpmax = 0; } } cout<<"MaxValue: "<<max<<endl; return 0; }嘿嘿,谁能看出那个数组中和最大的子序列是什么?? 应该是最简单的算法了,在网上搜了下,好些人写得有问题,误人子弟啊。
上面是没有考虑全负的情况,修正如下:
int a[]={-10,3,9,-16,-90,-100,-90,6,-7};
int n =sizeof(a)/sizeof(int);
int max = a[0];
int tmpmax = 0;
for(int i=0;i<n;i++)
{
if((tmpmax=tmpmax+a[i])>max)
{
max = tmpmax;
}
else
{
if(tmpmax<0)
{
if(max<0)
if(a[i]>max)
max = a[i];
else
tmpmax = 0;
}
}
}
cout<<"MaxValue: "<<max<<endl;
如果全负实际是做了一遍选择排序。
相关文章推荐
- 【算法题】求数组中子数组的最大乘积
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 大学时候想的一个算法——计算数组中最大和序列
- 算法题:找出一个数组中相加值最大的连续序列元素
- 数组连续子序列的最大的和-四种算法,四种时间复杂度
- 《github一天一道算法题》:分治法求数组最大连续子序列和
- 找工作知识储备---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- ] 找工作知识储备(2)---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 大学时候想的一个算法——计算数组中最大和序列
- 数组连续子序列的最大的和;四种算法,四种时间复杂度
- 求数组的最大连续子序列和的四种算法
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 《github一天一道算法题》:分治法求数组最大连续子序列和
- 算法复习------求数组的最大子序列
- K:求取数组中最大连续子序列和的四个算法
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 求数组中的最大子序列的值最优算法
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串