zoukankan      html  css  js  c++  java
  • leetcode1186 Maximum Subarray Sum with One Deletion

    思路:

    最大子段和的变体,前后两个方向分别扫一遍即可。

    实现:

     1 class Solution
     2 {
     3 public:
     4     int maximumSum(vector<int>& arr)
     5     {
     6         int n = arr.size();
     7         if (n == 1) return arr[0];
     8         vector<int> f(n), b(n);
     9         int minn = 0, sum = 0;
    10         for (int i = 0; i < n; i++)
    11         {
    12             sum += arr[i];
    13             f[i] = sum - minn;
    14             minn = min(minn, sum);
    15         }
    16         minn = sum = 0;
    17         for (int i = n - 1; i >= 0; i--)
    18         {
    19             sum += arr[i];
    20             b[i] = sum - minn;
    21             minn = min(minn, sum);
    22         }
    23         int ans = *max_element(f.begin(), f.end());
    24         for (int i = 0; i < n; i++)
    25         {
    26             if (arr[i] > 0) continue;
    27             ans = max(ans, (i > 0 ? f[i - 1] : 0) + (i < n - 1 ? b[i + 1] : 0));
    28         }
    29         return ans;
    30     }
    31 }
  • 相关阅读:
    语言只是个工具
    最近学到的一点东西
    iBeacon开发
    马上着手开发Mac应用程序
    Text Kit入门
    Text Kit进阶
    Web Notification
    Objective-C异步编程
    Clang Language Extensions
    黑客与画家
  • 原文地址:https://www.cnblogs.com/wangyiming/p/11856909.html
Copyright © 2011-2022 走看看