检查 C++ 中给定的一组区间中是否存在两个重叠的区间


假设,我们获得了一组区间,其中包括值 (time1, time2),其中 time1 表示事件的开始时间,time2 表示事件的结束时间。我们的任务是检查这些区间中的任何区间是否与该集合中的其他区间重叠。如果任区间重叠,则返回结果为 True,否则返回 False。

因此,如果输入类似 [(4,7), (5,11), (7,11), (5,8)],则输出将为 True。

为了解决这个问题,我们将遵循以下步骤 −

  • 对列表 inputArr 进行排序
  • 对于从 1 到 inputArr 大小的范围 i,执行
    • 如果 inputArr [i - 1].time2 > inputArr[i].time1,则
      • 返回 True
    • 返回 False

让我们看看以下实现以获得更好的理解 −

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
class IntervalClass {
public:
   int time1, time2;
};
bool compare(IntervalClass inst1, IntervalClass inst2){
   return (inst1.time1 < inst2.time1) ? true : false;
}
bool solve(vector<IntervalClass> &inputArr){
   int size = inputArr.size();
   sort(inputArr.begin(), inputArr.end(), compare);
   for (int i = 1; i < size; i++)
      if (inputArr[i - 1].time2 > inputArr[i].time1)
         return true;
   return false;
}
int main(){
   vector<IntervalClass> inputArr = {{4,7},{5,11},{7,11},{5,8}};
   int size = sizeof(inputArr) / sizeof(inputArr[0]);
   cout << solve(inputArr);
}

输入

{{4,7},{5,11},{7,11},{5,8}}

输出

1

更新日期:2020 年 12 月 30 日

739 次查看

开启你的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.