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

C++ में डेटा स्ट्रीम को असंयुक्त अंतराल के रूप में


मान लीजिए हमारे पास पूर्णांकों का एक डेटा स्ट्रीम इनपुट है, ये a1, a2, ..., an, ... जैसे हैं, हमें अब तक देखी गई संख्याओं को असंयुक्त अंतराल की सूची के रूप में सारांशित करना है। उदाहरण के लिए, मान लीजिए इनपुट पूर्णांक 1, 3, 8, 2, 7, ... हैं, तो सारांश होगा -

  • [1,1]

  • [1, 1], [3, 3]

  • [1, 1], [3, 3], [8, 8]

  • [1, 3], [8, 8]

  • [1, 3], [7, 8].

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे -

  • nums नामक एक सेट बनाएं

  • आरंभकर्ता में, low := -inf और high := inf सेट करें

  • addNum विधि से जो num को इनपुट के रूप में लेता है, num को सेट nums में डालें

  • get interval विधि से, निम्नलिखित करें -

  • एक 2D सरणी ret परिभाषित करें

  • it := सेट nums का प्रारंभ तत्व

  • जब it सेट में है, करें -

    • x := it का मान

    • यदि ret खाली है या ret के अंतिम तत्व के इंडेक्स 1 पर तत्व + 1 < x, तो,

      • जोड़ी { x, x } को ret के अंत में डालें

    • अन्यथा

      • ret के अंतिम तत्व के इंडेक्स 1 पर मौजूद तत्व को 1 से बढ़ाएं

    • it को अगले तत्व पर ले जाएं

  • ret लौटाएं

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h> using namespace std; void print_vector(vector<vector<auto> > v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << "[";       for(int j = 0; j <v[i].size(); j++){          cout << v[i][j] << ", ";       }       cout << "],";    }    cout << "]"<<endl; } class SummaryRanges {    public:    set <int> nums;    int low, high;    SummaryRanges() {       low = INT_MAX;       high = INT_MIN;    }    void addNum(int val) {       nums.insert(val);    }    vector<vector<int>> getIntervals() {       vector < vector <int> > ret;       set <int> :: iterator it = nums.begin();       while(it != nums.end()){          int x = *it;          if(ret.empty() || ret.back()[1] + 1 < x){             ret.push_back({x, x});          } else {             ret.back()[1]++;          }          it++;       }       return ret;    } }; main(){    SummaryRanges ob;    ob.addNum(1);    print_vector(ob.getIntervals());    ob.addNum(3);    print_vector(ob.getIntervals());    ob.addNum(8);    print_vector(ob.getIntervals());    ob.addNum(2);    print_vector(ob.getIntervals());    ob.addNum(7);    print_vector(ob.getIntervals()); }

इनपुट

कक्षा को आरंभ करें, फिर एक-एक करके तत्व डालें और अंतराल देखें। तो तत्व हैं [1,3,8,2,7]

आउटपुट

[[1, 1, ],] [[1, 1, ],[3, 3, ],] [[1, 1, ],[3, 3, ],[8, 8, ],] [[1, 3, ],[8, 8, ],] [[1, 3, ],[7, 8, ],]

  1. - C++ में बीयर बोतल विनिमय समस्या

    मान लीजिए हमारे पास एक संख्या n है। यहाँ n भरी हुई बीयर की बोतलों को दर्शाता है। यदि हम 3 खाली बीयर की बोतलों को 1 भरी हुई बीयर की बोतल से बदल सकते हैं, तो हमें उन बीयर की बोतलों की संख्या ज्ञात करनी है जिन्हें हम पी सकते हैं। उदाहरण के लिए, यदि इनपुट 10 है, तो आउटपुट 14 होगा। समाधान दृष्टिकोण इस

  1. - C++ में समाहित अंतराल

    मान लीजिए हमारे पास अंतरालों की एक द्वि-आयामी सूची है जहां प्रत्येक अंतराल में दो मान [start, end] होते हैं। हमें जांचना है कि क्या कोई ऐसा अंतराल है जो दूसरे अंतराल को समाहित करता है। उदाहरण के लिए, यदि इनपुट [[2,4], [5,11], [5,9], [10,10]] है, तो आउटपुट true होगा क्योंकि [5,11], [5,9] को समाहित

  1. C++ में जंप गेम V C++ में जंप गेम V

    मान लीजिए हमारे पास arr नामक पूर्णांकों की एक सरणी और एक पूर्णांक d है। एक चरण में हम इंडेक्स i से कूद सकते हैं: i + x जहां: i + x < n और x की सीमा 1 से d है। = 0 और x की सीमा 1 से d है। arr[k] हो। हम सरणी के किसी भी इंडेक्स से कूदना शुरू कर सकते हैं। हमें अधिकतम इंडेक्स की संख्या ज्ञात करनी है ज