zoukankan      html  css  js  c++  java
  • 4.13每日一题题解

    仁慈的浩牛哥

    涉及知识点:

    • 思维

    solution:

    • (祝大家周一愉快)
    • (这个题目首先从数据范围我们知道,n^2的做法是不可取的)
    • (所以我们应该想到一种O(n)的做法,或者是O(nlogn),或者更好的做法)
    • (对于每个数我们都有被删除的可能性,所以对于当前的数字a[i],我们需要计算出这个数加上若干个前面连续的数的最大值)
    • (比如 5,-9,10,6,-3的pre数组的值就是 5,-4,10,16,13)
    • (那么我们计算出next也就很简单了, 12,7,16,6,-3)
    • (那么我们再处理每个数删除情况就分为以下三种情况)
    • (pre[i - 1] + Next[i + 1],pre[i - 1],Next[i + 1] 三者中的最大值)

    std:

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <sstream>
    using namespace std;
    
    const int N = 1e5 + 10;
    
    int a[N];
    int pre[N];
    int Next[N];
    
    int n;
    int main()
    {
        cin >> n;
        int res = -0x3f3f3f3f;
        for(int i = 1;i <= n;i ++)
        {
            cin >> a[i];
        }
        
        int sum = 0;
        
        for(int i = 1;i <= n;i ++)
        {
            sum += a[i];
            res = max(res,a[i]);
            pre[i] = max(a[i],sum);
            if(sum < 0)sum = 0;
        }
        sum = 0;
        for(int i = n;i >= 0;i --)
        {
            sum += a[i];
            Next[i] = max(sum,a[i]);
            if(sum < 0)sum = 0;
            
        }
        
        for(int i = 1;i <= n;i ++)
        {
            res = max({pre[i - 1] + Next[i + 1],pre[i - 1],Next[i + 1],res});
        }
        
        cout << res << endl;
        
        return 0;
    }
    
  • 相关阅读:
    UIautomator Python测试
    selenium提供了三种模式的断言:assert,verify,waitfor
    编译标志
    模块级函数
    执行匹配
    反斜杠
    正则表达式
    重复
    字符匹配
    贪婪 vs 不贪婪
  • 原文地址:https://www.cnblogs.com/QFNU-ACM/p/12689714.html
Copyright © 2011-2022 走看看