1499. 满足不等式的最大值

题目描述

数组points在x轴上是严格单调增,需要求一个不等式x1 + y2 + x2 - x1的最大值?要求是x2-x1不能超过k

f1-分析不等式+单调队列

基本分析

  1. 怎么能让值最大?对当前x2和y2来说,在满足x2-x1<=k的区间,需要有y1-x1最大
  2. 怎么维护以上最大值?单调队列

代码

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

总结

  1. 队头移除的是啥?不满足x约束的点
  2. 队尾按照什么去冗余?y-x值
  3. 为啥更新ans需要判断?离散的,可能会把q删空
posted @   zhangk1988  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示