当前位置:网站首页>力扣 757. 设置交集大小至少为2
力扣 757. 设置交集大小至少为2
2022-08-06 05:27:00 【三更鬼】
题目来源:https://leetcode.cn/problems/set-intersection-size-at-least-two/
大致题意:
给一组整数区间,找出一个最小的集合 S,使得 S 与每个区间的交集至少有两个元素,返回 S 的长度
思路
对于区间 [l1, r1] 和 区间 [l2, r2],若 l1 <= l2,那么有以下情况:
- 若 l1 <= l2 < r2 <= r1,那么这两个区间的交集元素大于等于 2 个
- 若 l1 < l2 == r1 < r2,那么这两个区间的交集元素只有一个 l2
- 若 r1 < l2,那么这两个区间没有交集
那么,对于以上情况,若使 S 与两个区间的交集元素至少有两个,那么 S 的最小长度为:
- S 最小长度为 2,为 l2 和 l2 + 1 即可
- S 最小长度为 3,为 l1、l2 和 l2 + 1 即可
- S 最小长度为 4,为 l1、l1 + 1、l2 和 l2 + 1 即可
于是可以将区间按照左边界升序排序,左边界相同的按照右边界降序排序(这样倒序遍历时,左边界相同的两个区间,左侧区间包含右侧区间,那么与右侧区间交集至少为 2 的 S,与左侧区间交集也至少为 2),然后倒序遍历区间,求出 S 的最小长度
具体实现时:
- 首先设集合的长度为 2,元素为最后一个区间的两个最小元素
- 倒序遍历,依次比较当前集合两个最小元素与当前区间的交集,根据上述两个区间交集的三种情况增加集合元素
代码:
public int intersectionSizeTwo(int[][] intervals) {
// 将区间按照左边界升序,右边界降序排序
Arrays.sort(intervals, (a, b) -> {
if (a[0] == b[0]) {
return b[1] - a[1];
}
return a[0] - b[0];
});
int n = intervals.length;
int ans = 2;
// 表示当前交集中最小的两个元素
int[] cur = new int[]{
intervals[n - 1][0], intervals[n - 1][0] + 1};
for (int i = n - 2; i >= 0; i--) {
// 当前区间覆盖了交集的两个最小元素,无需扩大交集
if (intervals[i][1] >= cur[1]) {
continue;
}
// 当前区间只覆盖了交集的最小元素,需要扩大交集
if (cur[0] <= intervals[i][1] && intervals[i][1] < cur[1]) {
cur[1] = cur[0];
// 将交集最小元素设置为当前区间左边界
cur[0] = intervals[i][0];
ans++;
} else if (intervals[i][1] < cur[0]) {
// 当前区间与交集没有重合元素
cur[0] = intervals[i][0];
cur[1] = intervals[i][0] + 1;
ans += 2;
}
}
return ans;
}
边栏推荐
- Qt 5.14.2 连接Mysql 数据库
- GFS分布式文件系统
- C#脚本CSharpScript
- R软件的下载与更新
- pip命令安装工具包时出现ReadTimeoutError或者THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE问题解决
- 伦敦市空间数据可视化
- AMPCOLOY940 high thermal conductivity beryllium-free copper alloy imported from the United States
- 分层架构&SOA架构
- 机器视觉——光源选型
- WebRTC新增FFmpeg视频编解码模块
猜你喜欢
随机推荐
Qt+YOLOv4实现目标检测
yolov4, yolov5 training nuscenes dataset/nuscenes dataset to coco format
R语言基础(数据类型,运算符,数据整理,管道操作)
C语言和其他高级语言的最大的区别是什么?
Zero foundation to build their own famine Don 't Starve server, get rid of the online caton and happy friend online
CW008A 铜合金
ffplay源码分析:图像格式转换
十、 一起学习Lua 数组
SemEval 2022 | 将知识引入NER系统,阿里达摩院获最佳论文奖
ELK日志分析系统(一)之ELK原理
分层架构&SOA架构
十五、一起学习Lua 协同程序(coroutine)
流媒体基础知识TS流 PS流 ES流区别
新朋老友齐聚首,共话「图形学」未来 | 将门行动派特别直播企划,就在7月6日晚!
CW008A Copper alloy
CVPR 2022 | SharpContour:一种基于轮廓变形 实现高效准确实例分割的边缘细化方法
Qt智能指针
卷积神经网络笔记
音视频同步 ffmpeg 推流
PointNeXt: 通过改进的训练以及模型缩放策略重新探究PointNet++



![[Multi-sensor fusion] A complete technical learning route](/img/7e/dbbbaf885da7d11e7a02a54f0b271a.png)





