每日一题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

《LeetCode之每日一题》:47.两个数组的交集

数据结构与算法之深入解析“设置交集大小至少为2”的求解思路与算法示例

每日一题--4--在两个文件中取交集,显示指定的内容

《LeetCode之每日一题》:51.两个数组的交集 II

每日一题558. 四叉树交集