题目描述
数组points在x轴上是严格单调增,需要求一个不等式x1 + y2 + x2 - x1的最大值?要求是x2-x1不能超过k
f1-分析不等式+单调队列 |
基本分析
- 怎么能让值最大?对当前x2和y2来说,在满足x2-x1<=k的区间,需要有y1-x1最大
- 怎么维护以上最大值?单调队列
代码
class Solution:
def findMaxValueOfEquation(self, points: List[List[int]], k: int) -> int:
ans = -inf
# 队首先加进来
q = deque([(points[0][0], points[0][1])])
for x, y in points[1:]:
# 看队头是否满足约束,这里每次移动并非1,需要while
while q and x - q[0][0] > k:
q.popleft()
# 不是每次都能更新答案的可能
if q:
ans = max(ans, x + y - q[0][0] + q[0][1])
# 处理队尾的冗余
while q and q[-1][1] - q[-1][0] <= y - x:
q.pop()
q.append((x, y))
return ans
总结
- 队头移除的是啥?不满足x约束的点
- 队尾按照什么去冗余?y-x值
- 为啥更新ans需要判断?离散的,可能会把q删空