查找C ++中所有区间的交集
假设我们有N个间隔,形式为{L,R},L是开始时间,R是结束时间。我们必须找到所有间隔的交集。相交是位于所有给定间隔内的间隔。如果找不到,则返回-1。例如,如果间隔类似于[{1,6},{2,8},{3,10},{5,8},则输出间隔为{5,6}
为了解决这个问题,我们将按照以下步骤操作:
考虑第一个间隔是最后一个间隔
从第二个间隔开始,尝试搜索交点。可能有两种情况
仅当R1<L2或R2<L1时[L1,R1]和[L2,R2]之间不可能有交集,在这种情况下,答案将为0
[L1,R1]和[L2,R2]之间没有交集,则所需的交集为{max(L1,L2),min(R1,R2)}
示例
#include<iostream>
#include<algorithm>
using namespace std;
class interval{
public:
int left, right;
};
void findIntersection(interval intervals[], int N) {
int l = intervals[0].left;
int r = intervals[0].right;
for (int i = 1; i < N; i++) {
if (intervals[i].left > r || intervals[i].right < l) {
cout << -1;
return;
} else {
l = max(l, intervals[i].left);
r = min(r, intervals[i].right);
}
}
cout << "{" << l << ", " << r << "}";
}
int main() {
interval intervals[] = {{ 1, 6 }, { 2, 8 }, { 3, 10 }, { 5, 8 } };
int N = sizeof(intervals) / sizeof(intervals[0]);
findIntersection(intervals, N);
}输出结果
{5, 6}热门推荐
4 初八的祝福语简短
10 爱小姨文案祝福语简短
11 单位搬迁新址祝福语简短
12 毕业英语祝福语大全简短
13 周末愉快祝福语高级简短
14 人民子弟春节祝福语简短
15 贺寿祝福语长辈简短
16 送水杯祝福语女生简短
17 新婚祝福语大全简短经典
18 中考祝福语简短高级句