Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 간격 세트 사이에 두 간격이 겹치는지 확인하십시오.

<시간/>

time1은 시작 시간을 나타내고 time2는 이벤트의 종료 시간을 나타내는 값(time1, time2)으로 구성된 간격 집합이 주어졌다고 가정합니다. 우리의 임무는 이러한 간격이 이 세트의 다른 간격과 겹치는지 여부를 확인하는 것입니다. 간격 중 하나라도 겹치면 결과를 True로 반환하고 그렇지 않으면 False를 반환합니다.

따라서 입력이 [(4,7), (5,11), (7,11), (5,8)]과 같으면 출력은 True가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • inputArr 목록 정렬
  • inputArr의 크기에서 범위 1에 있는 i에 대해
    • inputArr[i - 1].time2> inputArr[i].time1이면
      • 참 반환
    • 거짓을 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

#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