当处理区间问题时,贪心算法可以是一个有效的方法。以下是解决无重叠区间问题的贪心算法的完整代码示例:
```python
def find_non_overlapping_intervals(intervals):
# 按照结束时间对区间进行排序
intervals.sort(key=lambda x: x[1])
non_overlapping = []
last_end = float('-inf')
for interval in intervals:
start, end = interval
# 如果当前区间与上一个区间无重叠,则将其添加到结果列表中
if start >= last_end:
non_overlapping.append(interval)
last_end = end
return non_overlapping
# 示例用法
intervals = [(1, 4), (3, 6), (2, 8), (5, 9), (7, 10)]
non_overlapping_intervals = find_non_overlapping_intervals(intervals)
print(non_overlapping_intervals)
```
在上面的代码中,`find_non_overlapping_intervals` 函数接受一个区间列表作为输入,并返回一个无重叠的区间列表。首先,我们对区间列表按照结束时间进行排序。然后,我们从第一个区间开始遍历,检查当前区间与上一个区间是否有重叠。如果没有重叠,则将当前区间添加到结果列表中,并更新上一个区间的结束时间。最后,返回无重叠区间的列表。
在上面的示例中,输入的区间列表是 `[(1, 4), (3, 6), (2, 8), (5, 9), (7, 10)]`,按照结束时间排序后,得到 `[(1, 4), (3, 6), (5, 9), (7, 10), (2, 8)]`。通过贪心算法,我们得到无重叠的区间列表为 `[(1, 4), (5, 9)]`。