题解 | #最大序列和#

最大序列和

https://www.nowcoder.com/practice/df219d60a7af4171a981ef56bd597f7b

看到很多人用的DP,其实这个题目可以贪心。贪心的思路非常简单,我们看到不太合适(t ≤ 0)的时候,我们不如直接放弃前面的成果,重新开始(t = 0)。然后我们的ans就实时用来保存最大的成果即可。

这里需要注意的事情是,我们需要优先处理,可能最后注定是亏本买卖的情况,这里我就直接求解出最大值就好,如果最大值小于0,那必然亏本(尽量少亏一点就行~)

#include <climits>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
// 可以dp,也可以贪心
int main() {
    int n;
    while (cin >> n) {
        vector<int> f(n);
        long long ans = INT_MIN, t = 0;
        for (int i = 0; i < n; i++) {
            cin >> f[i];
        }
        ans = *max_element(f.begin(), f.end());
        if (ans >= 0) {
            for (int i = 0; i < n; i++) {
                t += f[i];
                if (t <= 0) t = 0;
                ans = max(ans, t);
            }
        }
        cout << ans << endl;
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务