Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
给你 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.length2 <= n <= 105points[i].length == 20 <= xi, yi <= 109
二、题解:
读题,结合示例1、2,可得 最宽垂直面积实际上是points数组邻两个点的横坐标最大的距离最大差
方法一 排序比较法
- 原理。主要是通过sort排序数组,然后通过Math.max比较差值得到最终答案。
代码:
var maxWidthOfVerticalArea = function(points) {
points.sort((a,b) => a[0]-b[0])
let max = 0
for (let i = 0; i < points.length - 1; i++) {
max = Math.max(max,points[i + 1][0]-points[i][0])
}
return max
};
tips:别使用冒泡排序、选择排序和插入顺序,会超出计算时间(已踩坑),这道题的n取值范围太大
- 除此方法外,可以使用快速排序,希尔排序、归并排序和堆排序4种其他方案
三、总结
- 此题可以排序比较法
- 排序比较法主要是通过sort排序数组,然后通过Math.max比较差值得到最终答案。
文中如有错误,欢迎在评论区指正