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

C++ में मिसिंग रेंजेस


मान लीजिए हमारे पास एक सॉर्टेड इंटीजर ऐरे nums है, एलिमेंट्स की रेंज समावेशी रेंज [lower, upper] में है, हमें मिसिंग रेंजेस ढूंढनी हैं।

इसलिए, यदि इनपुट है nums = [0, 1, 3, 50, 75], और lower मान 0 है और upper मान 99 है, तो आउटपुट होगा ["2", "4->49", "51->74", "76->99"]

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

  • एक ऐरे nums परिभाषित करें

  • एक सेट v परिभाषित करें

  • i := 0 से शुरू करें, जब i < t का आकार, i बढ़ाते हुए, करें -

    • यदि t[i] v में नहीं है, तो -

      • t[i] को v में डालें

      • t[i] को nums के अंत में डालें

  • एक ऐरे ret परिभाषित करें

  • curr := lower

  • i := 0, n := nums का आकार

  • जब curr <= upper, करें -

    • यदि i < n और nums[i] curr के समान है, तो -

      • (i को 1 से बढ़ाएं)

      • (curr को 1 से बढ़ाएं)

    • अन्यथा

      • temp := curr को स्ट्रिंग में बदलें

      • (curr को 1 से बढ़ाएं)

      • यदि i < n और nums[i] curr के समान है, तो -

        • temp को ret के अंत में डालें

        • बाकी भाग को अनदेखा करें, अगले इटरेशन पर जाएं

      • अन्यथा

        • यदि i, n के समान है, तो -

          • यदि curr <= upper, तो -

            • temp := "->"

            • temp := temp + upper को स्ट्रिंग के रूप में

            • curr := upper + 1

          • temp को ret के अंत में डालें

        • अन्यथा

          • temp := "->"

          • curr := nums[i]

          • temp := temp + (curr - 1) को स्ट्रिंग के रूप में

          • curr := nums[i]

          • temp को ret के अंत में डालें

  • ret लौटाएं

उदाहरण

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

#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } class Solution { public:    vector<string> findMissingRanges(vector<int>& t, int lower, int upper) {       vector <int> nums;       set <long long int> v;       for(int i = 0; i < t.size(); i++){          if(!v.count(t[i])){             v.insert(t[i]);             nums.push_back(t[i]);          }       }       vector < string > ret;       long long int curr = lower;       int i = 0;       int n = nums.size();       while(curr <= upper){          if(i < n && nums[i] == curr){             i++;             curr++;          }          else{             string temp = to_string(curr);             curr++;             if(i < n && nums[i] == curr){                ret.push_back(temp);                continue;             }             else{                if(i == n){                   if(curr <= upper){                      temp += "->";                      temp += to_string(upper);                      curr = (long long int )upper + 1;                   }                   ret.push_back(temp);                }                else{                   temp += "->";                   curr = nums[i];                   temp += to_string(curr - 1);                   curr = nums[i];                   ret.push_back(temp);                }             }          }       }       return ret;    } }; main(){    Solution ob;    vector<int> v = {0,1,3,50,75};    print_vector(ob.findMissingRanges(v, 0, 99)); }

इनपुट

{0,1,3,50,75}, 0, 99

आउटपुट

[2, 4->49, 51->74, 76->99, ]

  1. C++ में सबसे बड़ा BST सबट्री - अधिकतम नोड्स वाला BST खोजें C++ में सबसे बड़ा BST सबट्री - अधिकतम नोड्स वाला BST खोजें

    समस्या विवरण मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें उसका सबसे बड़ा सबट्री ढूंढना है जहां सबसे बड़ा का अर्थ है सबसे अधिक नोड्स वाला सबट्री। उदाहरण के लिए, यदि इनपुट इस तरह का ट्री है: तो आउटपुट 3 होगा, क्योंकि इस मामले में सबसे बड़ा BST सबट्री हाइलाइट किया गया है। समाधान दृष्टिकोण पोस्ट-ऑर्ड

  1. - C++ में मैजिक स्क्वायर के लापता विकर्ण तत्व भरें

    समस्या विवरण एक 3x3 मैट्रिक्स दिया गया है जिसके विकर्ण तत्व खाली हैं (0 से चिह्नित)। विकर्ण तत्वों को भरें ताकि प्रत्येक पंक्ति, स्तंभ और विकर्ण का योग समान हो। सूत्र: x = (M[1][2] + M[2][1]) / 2 z = (M[0][1] + M[1][0]) / 2 y = (x + z) / 2 उदाहरण कोड #include <iostream> using namespace st

  1. - C++ की कौन सी विशेषताएं C# में नहीं हैं?

    C++ की विशेषताएं जो C# में अनुपस्थित हैं C# और C++ दोनों ऑब्जेक्ट-ओरिएंटेड भाषाएं हैं, लेकिन उनके डिज़ाइन लक्ष्य अलग हैं। C# मैनेज्ड कोड, सेफ्टी और उत्पादकता पर केंद्रित है, जबकि C++ लो-लेवल कंट्रोल और मल्टीपल इनहेरिटेंस देता है। मुख्य अंतर विशेषताC++C# मल्टीपल इनहेरिटेंस (क्लासेस)समर्थितनहीं (