题目描述:
给你一个二维整数数组 point
,其中 points[i] = [xi, yi]
表示二维平面内的一个点。同时给你一个整数 w
。你需要用矩形 覆盖所有 点。
每个矩形的左下角在某个点 (x1, 0)
处,且右上角在某个点 (x2, y2)
处,其中 x1 <= x2
且 y2 >= 0
,同时对于每个矩形都 必须 满足 x2 - x1 <= w
。
如果一个点在矩形内或者在边上,我们说这个点被矩形覆盖了。
请你在确保每个点都 至少 被一个矩形覆盖的前提下,最少 需要多少个矩形。
注意:一个点可以被多个矩形覆盖
输入输出实例:
思路:这一题所给的数组的每个元素的y值其实并不影响我们做题,以为题目只要求了矩阵跨越x轴的范围是宽度不超过w,不限制我们的y轴,所以我们只需要考虑x轴就好了,我们对数组按照x的大小进行排序,然后进行遍历循环,在每次循环我们先建立一个矩阵,他的x1是points[i][0],x2是x1+w(以为要最少矩阵数量,所以我们的矩阵都取最宽值),然后找满足在[x1,x2]范围之间的点,并更新下标,直到不满足的我们就进入到下一次循环再创建一个新矩阵了,根据上述思路有以下代码:
class Solution:
def minRectanglesToCoverPoints(self, points: List[List[int]], w: int) -> int:
#先通过x对数组排序
points.sort()
n = len(points)
i = 0 #记录下标
count = 0 #矩形数量
while i < n :
count += 1
x1 = points[i][0]
#找这个矩形能框住的点
while i < n and points[i][0] <= x1 + w :
i += 1
return count