力扣1499.满足不等式的最大值
-
双端单调队列
- 将原式变形为 xj + yj + yi - xi
- 枚举j ,问题变为求i<j的yi - xi的最大值
- 有限制条件xi ≥ xj−k
- 单调队列储存二元组(x,y-x)
-
class Solution { public: int findMaxValueOfEquation(vector<vector<int>>& points, int k) { int ans = INT_MIN; deque<pair<int,int>> q; for(auto &p:points) { int x = p[0],y = p[1]; //如果队头元素的x不满足条件了 while(!q.empty() && q.front().first < x - k) q.pop_front(); //如果还有满足条件的,取队头的最大值 if(!q.empty()) ans = max(ans,x + y + q.front().second); //如果队尾元素比当前的小,之前弹掉 while(!q.empty() && q.back().second <= y - x) q.pop_back(); q.emplace_back(x,y-x); } return ans; } };