问题描述:
在一个数轴上,有很多线段,对应着坐标轴上的两点a
和b
,要获取任意两点线段都不重叠(端点是可以重叠)的情况下,最多可以选出多少段来? 其实和电视台排节目一个类型。
测试用例:
输入:
3 # 线段数,下面是各种线段(a, b)
6 3 # 特别注意,a 可能大于 b。估计是为了增加题目的复杂度吧哈
1 3
2 5
输出:
2
问题分析:
(1)先把数据整理一下,使a < b
。
(2)贪心思想解决,以 线段末尾点b
为关键字,进行排序。
(3)以第一个线段为开始,如何后续的线段的开始点,大于等于 第一个线段的末尾点,则 计算器加一,并更新,新的末尾点。依次遍历结束。
Python3实现:
# @Time :2018/09/15
# @Author :LiuYinxing
# 贪心思想,2018爱奇艺秋招
if __name__ == '__main__':
n = int(input()) # 输入数据
data = []
for case in range(n):
a, b = map(int, input().split())
if a < b:
data.append([a, b])
else:
data.append([b, a])
data = sorted(data, key=lambda x: x[1]) # 排序
cnt = 1
tmp = data[0][1]
for v in data: # 扫描计算
if tmp <= v[0]:
cnt += 1
tmp = v[1]
print(cnt) # 输出结果
声明: 总结学习,有问题可以批评指正,大神可以略过哦。