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

सी ++ का उपयोग कर ओवरलैपिंग अंतराल मर्ज करें।

समस्या कथन

किसी भी क्रम में समय अंतराल के एक सेट को देखते हुए, सभी अतिव्यापी अंतरालों को एक में मिला दें और परिणाम को आउटपुट करें जिसमें केवल परस्पर अनन्य अंतराल होना चाहिए

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

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

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

    के रूप में मिला दें।

एल्गोरिदम

1. Sort the intervals based on increasing order of starting time
2. Push the first interval on to a stack
3. For each interval perform below steps:
   3.1. If the current interval does not overlap with the top of the stack, push it.
   3.2. If the current interval overlaps with top of the stack and ending time of current interval is more than that of top of stack, update stack top with the ending time of current interval.
4. Finally, stack contains the merged intervals.

उदाहरण

#include <iostream>
#include <algorithm>
#include <stack>
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
using namespace std;
struct interval{
   int start;
   int 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,

  1. Linux पर c++ के लिए शीर्ष IDE क्या है?

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

  1. विंडो पर c++ के लिए शीर्ष IDE क्या है?

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