每日一题757. 设置交集大小至少为2
Posted 爱写Bug的王六六
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题757. 设置交集大小至少为2相关的知识,希望对你有一定的参考价值。
贪心:
题目要我们求最小点集的数量,并不规定点集 S 是连续段。
当只有一个线段时,我们可以在线段内取任意两点作为 S 成员,而当只有两个线段时,我们可以两个线段重合情况进行决策:
- 当两个线段完全不重合时,为满足题意,我们需要从两个线段中各取两个点,此时这四个点都可以任意取;
- 当两个线段仅有一个点重合,为满足 S 最小化的题意,我们可以先取重合点,然后再两个线段中各取一个;
- 当两个线段有两个及以上的点重合,此时在重合点中任选两个即可。
不难发现,当出现重合的所有情况中,必然可以归纳某个线段的边缘点上。即不存在两个线段存在重合点,仅发生在两线段的中间部分:
因此我们可以从边缘点决策进行入手。
可以按照「右端点从小到大,左端点从大到小」的双关键字排序,然后从前往后处理每个区间,处理过程中不断往 S 中添加元素,由于我们已对所有区间排序且从前往后处理,因此我们往 S 中增加元素的过程中必然是单调递增,同时在对新的后续区间考虑是否需要往 S 中添加元素来满足题意时,也是与 S 中的最大/次大值(点集中的边缘元素)做比较,因此我们可以使用两个变量 a 和 b 分别代指当前集合 S 中的次大值和最大值(a 和 b 初始化为足够小的值 −1),而无需将整个 S 存下来。
以上是关于每日一题757. 设置交集大小至少为2的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] Set Intersection Size At Least Two 设置交集大小至少为2