返回
LeetCode第435题:无重叠区间
前端
2023-11-03 05:59:04
## LeetCode第435题:无重叠区间
**题目**
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
**注意:**
- 可以认为区间的终点总是大于它的起点。
- 区间[1,2]和[2,3]的边界相互“接触”,但没有相互重叠。
**示例:**
输入: [[1,2],[2,3],[3,4],[1,3]]
输出: 1
解释: 移除区间[1,3]后,剩下的区间互不重叠。
## 解题思路
这一问题可以看成是一个求解最少删除区间数量的问题。要想使区间互不重叠,我们可以选择删除那些已经重叠的区间。
具体而言,我们可以采用贪心算法来解决这个问题。贪心算法是一种在每一步选择当前最优解的算法。在这个问题中,我们可以先将区间按照它们的终点从小到大排序,这样可以保证我们总是选择最左边的区间作为候选区间。
然后,我们从第一个区间开始遍历,如果当前区间与前一个区间重叠,则删除当前区间;否则,将当前区间添加到结果集中。
```python
def erase_overlap_intervals(intervals):
"""
:type intervals: List[List[int]]
:rtype: int
"""
if not intervals:
return 0
# Sort the intervals by their end points
intervals.sort(key=lambda x: x[1])
# Initialize the result
result = 0
# Initialize the previous interval
prev = intervals[0]
# Iterate over the remaining intervals
for interval in intervals[1:]:
# If the current interval overlaps with the previous interval, remove the current interval
if interval[0] < prev[1]:
result += 1
# Otherwise, update the previous interval
else:
prev = interval
# Return the result
return result
时间复杂度
该算法的时间复杂度为O(nlogn),其中n是区间数量。这是因为排序的时间复杂度为O(nlogn),而贪心算法本身的时间复杂度为O(n)。
空间复杂度
该算法的空间复杂度为O(n),这是因为我们需要创建一个新的数组来存储排序后的区间。