今日题目
https://leetcode.com/problems/check-if-grid-can-be-cut-into-sections
思路
这道题的核心在于区间合并。如果将问题压缩到一维,本质上就是:在这些区间中,是否存在两个以上的"间隔"?
解题方法
因此,我们可以对列表排序,然后遍历整个列表,判断当前区间与已遍历区间之间是否存在间隔。若存在间隔,则计数加一;否则将新区间合并进来。这个过程需要分别在水平方向和垂直方向各执行一次。
复杂度
- 时间复杂度:$O(N)$,N 为
rectangles的长度。 - 空间复杂度:$O(1)$。
代码
class Solution:
def checkValidCuts(self, n: int, rectangles: List[List[int]]) -> bool:
N = len(rectangles)
def get_res(a,b):
rectangles.sort(key = lambda x: (x[a], x[b]))
gapCnt,maxPos,l = 0,1,0
while(l < N):
while(l < N and rectangles[l][a] < maxPos):
maxPos = max(maxPos, rectangles[l][b])
l += 1
if l == N:
break
else:
gapCnt += 1
maxPos = rectangles[l][b]
# print(a,l)
if gapCnt > 1:
return True
return False
return get_res(0,2) or get_res(1,3)