मान लीजिए, हमें अंतराल का एक सेट दिया गया है जिसमें मान (समय 1, समय 2) शामिल हैं, जहां समय 1 प्रारंभिक समय का प्रतिनिधित्व करता है, और समय 2 किसी घटना के समाप्ति समय का प्रतिनिधित्व करता है। हमारा काम यह जांचना है कि इनमें से कोई भी अंतराल इस सेट में किसी अन्य अंतराल को ओवरलैप करता है या नहीं। यदि कोई अंतराल ओवरलैप होता है, तो हम परिणाम को सही के रूप में लौटाते हैं, अन्यथा हम गलत लौटाते हैं।
इसलिए, अगर इनपुट [(4,7), (5,11), (7,11), (5,8)] जैसा है, तो आउटपुट सही होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- सूची को क्रमबद्ध करें inputArr
- इनपुट 1 से लेकर इनपुट के आकार तक के लिए, करें
- अगर inputArr [i - 1].time2> inputArr[i].time1 तो
- सही लौटें
- झूठी वापसी
- अगर 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