Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में ओवरलैपिंग अंतराल मर्ज करना

समस्या कथन

किसी भी क्रम में समय अंतराल का एक सेट दिया गया है, सभी ओवरलैपिंग अंतराल को एक में मर्ज करें और परिणाम आउटपुट करें जिसमें केवल पारस्परिक रूप से अनन्य (mutually exclusive) अंतराल हों।

दिए गए अंतराल सेट {{12, 14}, {11, 13}, {20, 22}, {21, 23}} के लिए:

  • अंतराल {12, 14} और {11, 13} एक दूसरे को ओवरलैप करते हैं, इसलिए उन्हें {11, 14} के रूप में मर्ज करें
  • अंतराल {20, 22} और {21, 23} एक दूसरे को ओवरलैप करते हैं, इसलिए उन्हें {20, 23} के रूप में मर्ज करें

एल्गोरिदम

1. अंतराल को प्रारंभ समय के बढ़ते क्रम के आधार पर सॉर्ट करें
2. पहले अंतराल को स्टैक पर पुश करें
3. प्रत्येक अंतराल के लिए नीचे दिए गए चरण करें:
   3.1. यदि वर्तमान अंतराल स्टैक के शीर्ष के साथ ओवरलैप नहीं करता, तो इसे पुश करें।
   3.2. यदि वर्तमान अंतराल स्टैक के शीर्ष के साथ ओवरलैप करता है और वर्तमान अंतराल का अंत समय शीर्ष से अधिक है, तो स्टैक शीर्ष को वर्तमान अंतराल के अंत समय से अपडेट करें।
4. अंत में, स्टैक में मर्ज किए गए अंतराल होते हैं।

C++ उदाहरण

#include <iostream>
#include <algorithm>
#include <stack>
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
using namespace std;

struct Interval {
    int start, end;
};

bool compareInterval(Interval i1, Interval i2) {
    return (i1.start < i2.start);
}

void mergeOverlappingIntervals(Interval *arr, int n) {
    if (n <= 0) return;
    stack<Interval> s;
    sort(arr, arr + n, compareInterval);
    s.push(arr[0]);
    for (int i = 1; i < n; ++i) {
        Interval top = s.top();
        if (top.end < arr[i].start)
            s.push(arr[i]);
        else if (top.end < arr[i].end) {
            top.end = arr[i].end;
            s.pop();
            s.push(top);
        }
    }
    cout << "Merged intervals: " << endl;
    while (!s.empty()) {
        Interval i = s.top();
        cout << "{" << i.start << ", " << i.end << "}" << " ";
        s.pop();
    }
    cout << endl;
}

int main() {
    Interval arr[] = {{12, 14}, {11, 13}, {20, 22}, {21, 23}};
    mergeOverlappingIntervals(arr, SIZE(arr));
    return 0;
}

आउटपुट

Merged intervals: {20, 23} {11, 14}
  1. - C++ में फ़ंक्शन का उपयोग करके दो अंतराल के बीच अभाज्य संख्याएं प्रदर्शित करने का प्रोग्राम

    एक अभाज्य संख्या एक पूर्ण संख्या है जो एक से बड़ी होती है और अभाज्य संख्या के केवल कारक एक और स्वयं होने चाहिए। कुछ पहली अभाज्य संख्याएँ 2, 3, 5, 7, 11, 13, 17 आदि हैं। दो अंतराल के बीच कई अभाज्य संख्याएँ हो सकती हैं। उदाहरण के लिए, अंतराल 5 और 20 के बीच अभाज्य संख्याएँ 5, 7, 11, 13, 17 और 19 हैं। द

  1. - लिनक्स पर C++ के लिए शीर्ष IDE

    बड़े प्रोजेक्ट्स को केवल टेक्स्ट एडिटर्स पर प्रबंधित करना मुश्किल होता है। ऐसे मामलों में IDE का उपयोग करने से आप अधिक उत्पादक और कम निराश होंगे। विभिन्न प्रकार के IDE उपलब्ध हैं और आपको अपनी आवश्यकताओं के अनुरूप सही चुनना चाहिए। यहां लिनक्स के लिए सर्वश्रेष्ठ C/C++ IDEs की सूची दी गई है। NetBeans

  1. - विंडोज पर C++ के लिए शीर्ष IDE

    बड़े प्रोजेक्ट्स को केवल टेक्स्ट एडिटर्स पर प्रबंधित करना मुश्किल होता है। ऐसे मामलों में IDE का उपयोग करने से आप अधिक उत्पादक और कम निराश होंगे। विभिन्न प्रकार के IDE उपलब्ध हैं और आपको अपनी आवश्यकताओं के अनुरूप सही चुनना चाहिए। यहां विंडोज के लिए सर्वश्रेष्ठ C/C++ IDEs की सूची दी गई है। Visual S