这是一个经典的区间调度问题,可以使用贪心算法来解决。

首先,将所有区间按照右端点从小到大进行排序。

然后,从左到右遍历每个区间。对于当前遍历到的区间,如果它的左端点大于前一个选中区间的右端点,说明它与前一个选中区间不重叠,可以选择它。将它的价值加到当前的总价值中,并更新当前选中区间的右端点为当前区间的右端点。

最后,得到的总价值即为所求。

以下是具体的实现代码:

def interval_scheduling(intervals):
    # 按照右端点从小到大排序
    intervals.sort(key=lambda x: x[1])
    
    # 初始化当前选中区间的右端点和总价值
    max_value = 0
    prev_end = float('-inf')
    
    for interval in intervals:
        start, end, value = interval
        if start > prev_end:
            max_value += value
            prev_end = end
    
    return max_value

# 测试样例
intervals = [(1, 4, 2), (3, 7, 4), (5, 9, 3), (6, 10, 2)]
print(interval_scheduling(intervals))  # 输出:6

时间复杂度分析: 排序的时间复杂度为O(nlogn),遍历区间的时间复杂度为O(n),所以总的时间复杂度为O(nlogn)。

区间调度问题:贪心算法求解最大价值区间

原文地址: https://www.cveoy.top/t/topic/o8of 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录