1. 问题描述:
给你 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
2. 思路分析:
感觉题目说的比较晦涩一点,其实就是统计相邻两点之间宽度的最大值,因为使用的是python语言,所以可以对给出的points数组使用sort方法并且传递lambda表达式进行排序,然后使用zip函数将所有相邻的两个点打包成元祖,也就相当于对相邻的两个点进行组合,最后我们只需要计算出相邻两点宽度的最大值即可
3. 代码如下:
from typing import List
class Solution:
# 先排序然后检查相邻两个点之间的距离
def maxWidthOfVerticalArea(self, points: List[List[int]]) -> int:
# 对列表进行排序
points.sort(key=lambda x: x[0])
# 当两个列表长度不一致的时候zip函数以长度较短的那个为准
return max(x2[0] - x1[0] for x1, x2 in zip(points, points[1:]))