LeetCode 1637.两点之间不包含任何点的最宽垂直区域

2024-02-25 07:28

本文主要是介绍LeetCode 1637.两点之间不包含任何点的最宽垂直区域,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给你 n 个二维平面上的点 points ,其中 points[i] = [xi, yi] ,请你返回两点之间内部不包含任何点的 最宽垂直区域 的宽度。

垂直区域 的定义是固定宽度,而 y 轴上无限延伸的一块区域(也就是高度为无穷大)。 最宽垂直区域 为宽度最大的一个垂直区域。

请注意,垂直区域 边上 的点 不在 区域内。

示例 1:
在这里插入图片描述


输入:points = [[8,7],[9,9],[7,4],[9,7]]
输出:1
解释:红色区域和蓝色区域都是最优区域。
示例 2:

输入:points = [[3,1],[9,0],[1,0],[1,4],[5,3],[8,8]]
输出:3

提示:

n == points.length
2 <= n <= 105
points[i].length == 2
0 <= xi, yi <= 109

法一:排序后遍历一遍即可:

class Solution {
public:int maxWidthOfVerticalArea(vector<vector<int>>& points) {sort(points.begin(), points.end(), [] (vector<int> left, vector<int> right) {return left[0] < right[0];});int ans = points[1][0] - points[0][0];for (int i = 2; i < points.size(); ++i){if (points[i][0] - points[i - 1][0] > ans){ans = points[i][0] - points[i - 1][0];}}return ans;}
};

如果points的长度为n,此算法时间复杂度为O(nlogn),空间复杂度为O(1)。

法二:将法一中的sort替换为自己写的快排:

class Solution {
public:int maxWidthOfVerticalArea(vector<vector<int>>& points) {quickQort(points, 0, points.size() - 1);int ans = points[1][0] - points[0][0];for (int i = 2; i < points.size(); ++i){if (points[i][0] - points[i - 1][0] > ans){ans = points[i][0] - points[i - 1][0];}}return ans;}private:void quickQort(vector<vector<int>>& points, int begin, int end){if (begin >= end){return;}int divider = begin - 1;for (int i = begin; i <= end - 1; ++i){if (points[i][0] < points[end][0]){++divider;swap(points[i], points[divider]);}}swap(points[divider + 1], points[end]);quickQort(points, begin, divider);quickQort(points, divider + 2, end);}
};

如果points的长度为n,此算法时间复杂度为O(nlogn),空间复杂度为O(1)。

这篇关于LeetCode 1637.两点之间不包含任何点的最宽垂直区域的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744785

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(