1007. Maximum Subsequence Sum (25)

本文探讨了在处理特殊数据如-100-1时的代码优化方法,通过对比不同版本的代码实现,展示了如何更高效地解决这类问题,并提供了具体的解决策略和实例。

总结:

之前 在Basic里做过这道题,那时候 根据陈姥 并参考了网上对特殊数据的处理 抄完代码A的 

现在 再做 有些思路 在线处理?

只是对于特殊数据 -1 0 0 -1 要不是之前做过 可能真得想不到··· 具体解决方法参考代码

#include<iostream>
using namespace std;

int main()
{
       int K, i;
       int *arr;
       while( cin>>K )
       {
             arr = new int[K];
             for( i=0; i<K; i++ )
                cin>>arr[i];
             int ans, first, last, temp, sum;// ans 最终的最大值 sum当前最大值
             ans = sum = 0;
             first = temp = 0;
             last = K-1;// last 一开始 我初始化为 0了 后来读题知道 如果序列中元素都是负数 那么 输出结果 为 0 0 K-1 
             for( i=0; i<K; i++ )
             {
                   sum+=arr[i];
                   if( sum > ans || ( sum==0&&first == 0 ) )// 解决“总结”中的 方法 是多加一条 或 语句 即更新一下 当前的 first 和 last
                   {
                       ans = sum;                           // 如果不更新 输出结果为 0 -1 -1  而正确结果应该是 0 0 0 
                       last = i;                            // 即最大序列只有一个元素为 第二个元素 0
                       first = temp;
                   }
                   else if( sum<0 )
                   {
                       sum=0;
                       temp = i+1;
                   }
             }
             cout<<ans<<" "<<arr[first]<<" "<<arr[last]<<endl;
       }
       return 0;
}

2015.9.6 Ver2.0

#include<iostream>
#include<cstdio>
#include<fstream>
#include<vector>
using namespace std;
vector<int>vec;

int main()
{
    //ifstream cin("test.txt");
    int K;
    int sum=-1, tmp, S, E;//一开始sum初始化0 未考虑到最大连续子序列和为0的情况
    cin>>K;
    vec.resize(K);
    for(int i=0; i<K; i++)
        cin>>vec[i];
    for(int i=0; i<K; i++)
    {
        tmp=0;
        for(int j=i; j<K; j++)
        {
            tmp+=vec[j];
            if(tmp>sum)
            {
                sum=tmp;
                S=vec[i];
                E=vec[j];
            }
        }
    }
    if(sum<0)
    {
        cout<<0<<" "<<vec[0]<<" "<<vec[K-1]<<endl;
        return 0;
    }
    cout<<sum<<" "<<S<<" "<<E<<endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值