前言
通过leetcode记录自己每天坚持刷题,以此监督自己的学习。不能放假了就懈怠😁
题目简介
题目传送地:814. 二叉树剪枝
一个整数区间 [a, b] ( a < b ) 代表着从 a 到 b 的所有连续整数,包括 a 和 b。
给你一组整数区间intervals,请找到一个最小的集合 S,使得 S
里的元素与区间intervals中的每一个整数区间都至少有2个元素相交。输出这个最小集合S的大小。
示例 1:
输入: intervals = [[1, 3], [1, 4], [2, 5], [3, 5]] 输出: 3 解释: 考虑集合 S =
{2, 3, 4}. S与intervals中的四个区间都有至少2个相交的元素。 且这是S最小的情况,故我们输出3。
解析
这个题没有做出来,看了大佬的题解恍然大悟呜呜呜,菜了
代码
class Solution:
def intersectionSizeTwo(self, intervals: List[List[int]]) -> int:
intervals.sort(key = lambda x:(x[1],-x[0]))
#贪心算法,遍历数组。
#分三种情况,1二者完全没有交集,2二者有一个数字的交集,3有两个以上的数字交集。
li = [-1,-1]
for x in intervals:
if x[0] <= li[-2]:
continue
if x[0] > li[-1]:
li.append(x[1]-1)
li.append(x[1])
return len(li) - 2