IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 1499. 满足不等式的最大值 详解 -> 正文阅读

[数据结构与算法]1499. 满足不等式的最大值 详解

1499. 满足不等式的最大值

给你一个数组 points 和一个整数 k 。数组中每个元素都表示二维平面上的点的坐标,并按照横坐标 x 的值从小到大排序。也就是说 p o i n t s [ i ] = [ x i , y i ] points[i] = [x_i, y_i] points[i]=[xi?,yi?] ,并且在 1 < = i < j < = p o i n t s . l e n g t h 1 <= i < j <= points.length 1<=i<j<=points.length 的前提下, x i < x j x_i < x_j xi?<xj? 总成立。

请你找出 y i + y j + ∣ x i ? x j ∣ y_i + y_j + |x_i - x_j| yi?+yj?+xi??xj? 的 最大值,其中 ∣ x i ? x j ∣ < = k |xi - xj| <= k xi?xj<=k 1 < = i < j < = p o i n t s . l e n g t h 1 <= i < j <= points.length 1<=i<j<=points.length

题目测试数据保证至少存在一对能够满足 ∣ x i ? x j ∣ < = k |x_i - x_j| <= k xi??xj?<=k的点。


捕捉题干信息我们发现:

  • 1 < = i < j < = p o i n t s . l e n g t h 1 <= i < j <= points.length 1<=i<j<=points.length 的前提下, x i < x j x_i < x_j xi?<xj? 总成立。 ①
  • 找出 y i + y j + ∣ x i ? x j ∣ y_i + y_j + |x_i - x_j| yi?+yj?+xi??xj? 的 最大值,其中 ∣ x i ? x j ∣ ≤ k |x_i - x_j| \leq k xi??xj?k 1 ≤ i < j ≤ p o i n t s . l e n g t h 1 \leq i < j \leq points.length 1i<jpoints.length。 ②

以①为条件可对②进行化简:

  • y i + y j + ∣ x i ? x j ∣ y_i + y_j + |x_i - x_j| yi?+yj?+xi??xj?—> ( y i ? x i ) + ( y j + x j ) (y_i-x_i)+(y_j+x_j) (yi??xi?)+(yj?+xj?)
  • ∣ x i ? x j ∣ ≤ k |x_i - x_j| \leq k xi??xj?k —> x j ? x i ≤ k x_j - x_i \leq k xj??xi?k

由此我们使用pair<T1, T2>(当pair为堆元素时,默认使用first元素为基准进行排序) 分别存放:

  • T1 = y i ? x i y_i-x_i yi??xi?

  • T2 = x j ? x i x_j - x_i xj??xi?

正如我们所说,pair作为元素时以第一个元素为基准默认进行大根堆排序(降序)

因此我们每次进行 ∣ x i ? x j ∣ ≤ k |x_i - x_j| \leq k xi??xj?k (k值)的合理性判断+ y i + y j + ∣ x i ? x j ∣ y_i + y_j + |x_i - x_j| yi?+yj?+xi??xj?最大值动态更新即可


代码如下:

class Solution {
public:
    int findMaxValueOfEquation(vector<vector<int>>& points, int k) {
        priority_queue<pair<int, int>> q;
        q.push({points[0][1]-points[0][0], points[0][0]});
        // 首先先将第一个数传入,防止队列为空
        int ans = INT_MIN;   // 把答案假定为 整型最小值 方便后期比较
        for(int i = 1; i < points.size(); ++i) {
            while(!q.empty()&&points[i][0]-q.top().second > k) {  
            // 如果队列不为空 且合理性不通过,弹出当前与之比较的数据即可,直到合理为止
                q.pop();
            }
            if(!q.empty()) {  // 如果不为空动态更新答案即可
                ans = max(ans, q.top().first + points[i][0]+points[i][1]);
            }
            q.push({points[i][1]-points[i][0], points[i][0]});
        }        
        return ans;
    }
};
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:33:24  更:2022-12-25 11:35:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 14:21:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码