【前端也得会算法】- 1637. 两点之间不包含任何点的最宽垂直面积 [ 中等 ]

122 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

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

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

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

示例

示例 1: image.png

    输入: 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

二、题解:

读题,结合示例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

};

image.png

tips:别使用冒泡排序、选择排序和插入顺序,会超出计算时间(已踩坑),这道题的n取值范围太大

  • 除此方法外,可以使用快速排序,希尔排序、归并排序和堆排序4种其他方案

三、总结

  • 此题可以排序比较法
  • 排序比较法主要是通过sort排序数组,然后通过Math.max比较差值得到最终答案。

文中如有错误,欢迎在评论区指正