2.14 求子数组之和的最大值
2012-09-13 17:33
295 查看
#include <iostream> using namespace std; int maxsum(int *src,int n,int &spos,int &epos) { int start,all,i,tmppos; all=start=src[n-1]; tmppos=spos=epos=n-1; for(i=n-2;i>=0;i--) { if(start>=0) { start+=src[i]; } else { start=src[i]; tmppos=i; } if(start>all) { all=start; epos=tmppos; spos=i; } } return all; } int max(int a, int b, int c) { if(a>b) { if(a>c) return a; } else { if(b>c) return b; return c; } } void toneg(int *src,int len)//整个数组取反 { for(int i=0;i<len;i++) { src[i]=-1*src[i]; } } int ext1(int *src, int n) { int tmp,s,e,sum1=0,sum2=0,sum3=0; for(int i=0;i<n;i++)//解就是整个数组的和 { sum1+=src[i]; } cout<<sum1<<endl; sum2=maxsum(src,n,s,e);//解没有跨过SRC[N-1]; cout<<sum2<<endl; toneg(src,n); tmp=maxsum(src,n,s,e); tmp=-1*tmp; sum3=sum1-tmp;//解是从数组中删掉一块和为负数且绝对值最大的子数组 cout<<sum3<<endl; return max(sum1,sum2,sum3); } int main() { int startpos,endpos; int s1[]={1,-2,3,5,-3,2}; int s2[]={0,-2,3,5,-1,2}; int s3[]={-9,-2,-3,-5,-3}; cout<<"s1 all:"<<maxsum(s1,6,startpos,endpos)<<endl; cout<<"start:"<<startpos<<" end:"<<endpos<<endl; cout<<"s2 all:"<<maxsum(s2,6,startpos,endpos)<<endl; cout<<"start:"<<startpos<<" end:"<<endpos<<endl; cout<<"s3 all:"<<maxsum(s3,5,startpos,endpos)<<endl; cout<<"start:"<<startpos<<" end:"<<endpos<<endl; cout<<"ext1 s1:"<<ext1(s1,6)<<endl; cout<<"ext1 s2:"<<ext1(s2,6)<<endl; cout<<"ext1 s3:"<<ext1(s3,5)<<endl; return 1; }
相关文章推荐
- 编程之美2.14扩展问题1 求子数组和的最大值(首尾可以相连)
- 编程之美2.14 求子数组和的最大值(首尾相连)
- 编程之美2.14扩展问题1 求子数组和的最大值(首尾可以相连)
- [编程之美2.14]求子数组之和的最大值
- 求子数组之和的最大值——编程之美 2.14 扩展问题 正确实现
- 求子数组之和的最大值——编程之美 2.14 扩展问题 正确实现
- 编程之美2.14扩展问题1 求子数组和的最大值(首尾可以相连)
- 求子数组的最大和
- 求子数组的最大和
- 动态规划(4):求子数组最大和
- (3): 求子数组的最大和
- 求子数组和的最大值
- 求子数组的最大和【算法】
- 微软算法100题03 求子数组的最大和
- 求子数组的最大和---Algorithms
- 求子数组的最大和
- 求子数组的最大和 C++实现
- 求子数组最大和
- H面试(23):求子数组最大和
- 编程之美--求子数组之和的最大值