解决 LeetCode 435 题:无重叠区间
2024.01.29 17:21浏览量:7简介:这道题目的要求是判断一个数组中的两个区间是否重叠。如果不重叠,则返回 false;如果重叠,则返回 true。在这里,我们假设区间是按照左端点进行排序的。
要解决这个问题,我们可以使用双指针的方法。首先,我们遍历整个区间数组,将每个区间的左端点和右端点分别存储在一个列表中。然后,我们遍历这个列表,对于每个区间,我们判断其左端点是否小于等于下一个区间的右端点。如果是,则这两个区间重叠,返回 true;否则,返回 false。这样,我们就可以在 O(n) 的时间复杂度内解决这个问题。
下面是一个 Python 的实现:
def checkIfOverlap(intervals):
if not intervals:
return False
# 将区间按照左端点排序
intervals.sort(key=lambda x: x[0])
# 存储每个区间的左端点和右端点
left_points = [interval[0] for interval in intervals]
right_points = [interval[1] for interval in intervals]
n = len(intervals)
for i in range(n):
if left_points[i] <= right_points[i+1]: # 如果当前区间的左端点小于等于下一个区间的右端点,则重叠
return True
return False
在这个实现中,我们首先对区间数组进行排序,然后使用两个指针分别指向当前区间和下一个区间。如果当前区间的左端点小于等于下一个区间的右端点,则这两个区间重叠,返回 True。否则,返回 False。这样,我们就可以在 O(n) 的时间复杂度内解决这个问题。
需要注意的是,如果输入的区间数组为空,那么直接返回 False。因为题目要求区间是按照左端点排序的,所以在实现中我们需要先对区间数组进行排序。同时,为了避免越界错误,我们需要使用 n+1 而不是 n 作为最后一个区间的索引。
发表评论
登录后可评论,请前往 登录 或 注册