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