其他分享
首页 > 其他分享> > 918. 环形子数组的最大和

918. 环形子数组的最大和

作者:互联网

 

 1 //数组是连续的
 2 class Solution 
 3 {
 4 public:
 5     int maxSubarraySumCircular(vector<int>& A) 
 6     {
 7         // 单调队列
 8         int n = A.size();
 9         deque<int> q;
10         for(int i = 0; i < n; i++) A.push_back(A[i]);
11         vector<int> s(2 * n + 1);
12         // 计算前缀和
13         
14         for(int i = 1; i <= 2 * n; i++)
15         {
16             s[i] = s[i- 1] + A[i-1];
17         }
18         // 初始化队列
19         q.push_back(0);
20         int res = INT_MIN;
21     
22         for(int i = 1; i <= 2 * n; i++)
23         {
24             if(q.size() && i - n > q.front()) q.pop_front();
25             if(q.size()) res = max(res, s[i] - s[q.front()]);
26             while(q.size() && s[q.back()] > s[i]) q.pop_back();
27             q.push_back(i);
28         }
29         return res;
30     }
31 };

 

标签:int,res,back,pop,环形,918,数组,front,size
来源: https://www.cnblogs.com/yuhong1103/p/12663600.html