无重叠线段的条数
- 问题描述:
爱奇艺原题是把面条放在坐标轴上铺开,和这道题目一样。
X轴上有N条线段,每条线段有1个起点S和终点E。最多能够选出多少条互不重叠的线段。(注:起点或终点重叠,不算重叠)。
例如:[1 5][2 3][3 6],可以选[2 3][3 6],这2条线段互不重叠。
输入说明:
第1行:1个数N,线段的数量(2 <= N <= 10000)
第2 - N + 1行:每行2个数,线段的起点和终点(-10^9 <= S,E <= 10^9) 输出说明:
输出最多可以选择的线段数量。输入示例:
3
1 5
2 3
3 6- 输出示例:
2 - 思路:
贪心。将线段末端点按照从小到大排序,哪个先结束先选哪个。把每个线段按照右端点升序排列,从左到右扫一遍,符合条件就res++。
def noOverlapLine(s):
res = 0
t = -10 ** 9
for i in range(n):
if t <= s[i][1]:
res += 1
t = s[i][0]
print res
if __name__ == "__main__":
# n = int(raw_input())
# s = []
# for i in range(n):
# a,b = map(int, raw_input().split())
# s.append([b,a])
n = 3
s = [[5, 1], [3, 2], [6, 3]]
s = sorted(s, key=lambda x: x[0]) # 按照线段右端点升序排列
noOverlapLine(s)
参考:https://blog.csdn.net/u013445530/article/details/48035029