最大子序列和问题

正式开始学习数据结构和算法来,看到第一章,最大子序列和问题.

但是他这个算法当数据全为负时就有问题,当然,书上有前提.于是,稍加改变就通用了.

原文代码:

 1 int MaxSubSum1(const vector<int>& lhs)
 2 {
 3     int Length=lhs.size();
 4     int maxsum=0,currsum=0;
 5     for(unsigned i=0;i!=Length;i++){
 6         currsum+=lhs.at(i);
 7         if(currsum>maxsum)
 8             maxsum=currsum;
 9         else if(currsum<0){
10             currsum=0;
11         }
12     }
13     return maxsum;
14 
15 }

但是,这个不适合float和全负数情况,稍加改动,附上测试代码

    

View Code
 1 #include <iostream>
 2 #include <vector>
 3 using namespace std;
 4 template<typename T>     
 5 T MaxSubSum1(const vector<T>& lhs)
 6 {
 7     T Length=lhs.size();
 8     T maxsum=0,currsum=0;
 9     for(unsigned j=0;j!=Length;j++){
10         if(lhs.at(j)>maxsum)
11             maxsum=lhs.at(j);
12     }
13     for(unsigned i=0;i!=Length;i++){
14         currsum+=lhs.at(i);
15         if(currsum>maxsum)
16             maxsum=currsum;
17         else if(currsum<0){
18             currsum=0;
19         }
20     }
21     return maxsum;
22 
23 }
24 
25 void main()
26 {
27     vector<float> vec;
28     vec.push_back(20);
29     vec.push_back(20);
30     vec.push_back(30);
31     vec.push_back(40.7);
32     vec.push_back(60);
33     cout<<"向量=";
34     for(int i=0;i!=vec.size();i++)
35         cout<<vec.at(i)<<",";
36     cout<<endl<<"最大子序列和是"<<MaxSubSum1(vec)<<endl;
37 
38 }

 

转载于:https://www.cnblogs.com/yTPety/archive/2013/03/04/Data_Structures_and_Algorithm.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值