满足不等式的最大值
你一个数组 points 和一个整数 k 。数组中每个元素都表示二维平面上的点的坐标,并按照横坐标 x 的值从小到大排序。
也就是说 points[i] = [xi, yi] ,并且在 1 <= i < j <= points.length 的前提下, xi < xj 总成立。
请你找出 yi + yj + |xi - xj| 的 最大值,其中 |xi - xj| <= k 且 1 <= i < j <= points.length。
题目测试数据保证至少存在一对能够满足 |xi - xj| <= k 的点
1. 双端队列 + 单调栈
左端维护范围,右端维护单调性
class Solution {
public:
int findMaxValueOfEquation(vector<vector<int>>& points, int k) {
deque<int> q;
int n = points.size();
int res = INT_MIN;
for(int i=0;i<points.size();i++){
while(!q.empty()&&points[i][0]-points[q.front()][0]>k) q.pop_front();//剔除掉不满足条件的,该点对于后面的数也不满足条件
if(!q.empty()) res = max(res,points[i][0]+points[i][1]+points[q.front()][1]-points[q.front()][0]);//队列权值呈降序排列
while(!q.empty() && points[q.back()][1]-points[q.back()][0] <= points[i][1]-points[i][0]) q.pop_back();//当前点权重更大,把权重小的挤出队列
q.push_back(i);
}
return res;
}
};