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;
    }
    
  • 相关阅读:
    php公立转农历
    php判断客户端浏览器类型
    php为图片添加水印
    php类精确验证身份证号码
    webpack脚手架搭建(简单版)
    《深入浅出Node.js》第4章 异步编程
    js 实现继承相关
    设计模式:观察者模式
    bind 方法实现
    用 CSS 实现字符串截断
  • 原文地址:https://www.cnblogs.com/QFNU-ACM/p/12689714.html
Copyright © 2011-2022 走看看