檢查 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.