Giả sử, chúng ta được cho một tập hợp các khoảng bao gồm các giá trị (time1, time2) trong đó time1 đại diện cho thời gian bắt đầu, và time2 đại diện cho thời gian kết thúc của một sự kiện. Nhiệm vụ của chúng ta là kiểm tra xem có bất kỳ khoảng nào chồng chéo lên khoảng khác trong tập hợp này hay không. Nếu bất kỳ khoảng nào chồng chéo, chúng ta trả về kết quả là True, ngược lại trả về False.
Vì vậy, nếu đầu vào giống như [(4,7), (5,11), (7,11), (5,8)] thì đầu ra sẽ là True.
Để giải quyết vấn đề này, chúng ta sẽ làm theo các bước sau:
- Sắp xếp danh sách
inputArr - Với
itừ 1 đến kích thước củainputArr, làm:- Nếu
inputArr[i-1].time2 > inputArr[i].time1thì:- Trả về True
- Nếu
- Trả về False
Ví dụ mã
#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);
return 0;
}
Đầu vào
{{4,7},{5,11},{7,11},{5,8}}
Đầu ra
1