题目描述
数组points在x轴上是严格单调增,需要求一个不等式x1 + y2 + x2 - x1的最大值?要求是x2-x1不能超过k
基本分析
- 怎么能让值最大?对当前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:]: |
| |
| 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删空
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现