首页 > 其他分享 >1499. 满足不等式的最大值

1499. 满足不等式的最大值

时间:2023-03-17 10:47:34浏览次数:30  
标签:不等式 最大值 points ans x2 1499 x1

题目描述

数组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删空

标签:不等式,最大值,points,ans,x2,1499,x1
From: https://www.cnblogs.com/zk-icewall/p/17225735.html

相关文章