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

C++ में K डिजिट्स हटाना


मान लीजिए हमारे पास एक नॉन-नेगेटिव इंटीजर num है जिसे स्ट्रिंग के रूप में दर्शाया गया है, हमें नंबर से k डिजिट्स हटाने हैं ताकि नया नंबर सबसे छोटा संभव हो। उदाहरण के लिए, अगर इनपुट "1432219" है और k = 3, तो रिजल्ट "1219" होगा।

इसे हल करने के लिए, हम इन स्टेप्स को फॉलो करेंगे:

  • एक स्टैक st डिफाइन करें, एक खाली स्ट्रिंग ret बनाएं

  • n := num का साइज

  • i को 0 से n-1 तक लूप करें:

    • जब तक k नॉन-जीरो है और स्टैक खाली नहीं है और स्टैक का टॉप > num[i]:

      • स्टैक से डिलीट करें और k को 1 से घटाएं

    • num[i] को st में इंसर्ट करें

  • जब तक k 0 नहीं है, स्टैक से एलिमेंट डिलीट करें

  • जब तक स्टैक खाली नहीं है:

    • ret := ret + स्टैक का टॉप, स्टैक से एलिमेंट डिलीट करें

  • अब ret स्ट्रिंग को रिवर्स करें

  • ans := एक खाली स्ट्रिंग, और i := 0

  • जब तक i < ret का साइज और ret[i] '0' नहीं है:

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

  • i < ret के साइज के लिए:

    • ans := ans + ret[i]

  • ret := ans

  • अगर ret का साइज 0 है तो "0" लौटाएं, अन्यथा ret

उदाहरण (C++)

बेहतर समझ के लिए निम्न इम्प्लीमेंटेशन देखें:

class Solution {
public:
    string removeKdigits(string num, int k) {
        stack <char> st;
        string ret = "";
        int n = num.size();
        for(int i = 0; i < n; i++){
            while(k && !st.empty() && st.top() > num[i]){
                st.pop();
                k--;
            }
            st.push(num[i]);
        }
        while(k--)st.pop();
        while(!st.empty()){
            ret += st.top();
            st.pop();
        }
        reverse(ret.begin(), ret.end());
        string ans = "";
        int i = 0;
        while(i < ret.size() && ret[i] == '0')i++;
        for(; i < ret.size(); i++)ans += ret[i];
        ret = ans;
        return ret.size() == 0? "0" : ret;
    }
};

इनपुट

"1432219" 3

आउटपुट

"1219"

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

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

  1. - C++ प्रोग्राम में K डिजिट्स हटाना

    मान लीजिए नंबर्स का एक सीक्वेंस अंकगणितीय कहलाता है अगर इसमें कम से कम तीन एलिमेंट्स हैं और किन्हीं दो लगातार एलिमेंट्स के बीच का अंतर समान है। उदाहरण के लिए, ये अंकगणितीय सीक्वेंस हैं: [1, 3, 5, 7, 9], [7, 7, 7, 7], [3, -1, -5, -9], लेकिन निम्न सीक्वेंस अंकगणितीय नहीं है: [1, 1, 2, 5, 7] अब N नंबर

  1. - C++ में चार डिवाइजर्स

    मान लीजिए हमारे पास एक इंटीजर ऐरे nums है, हमें उस ऐरे में उन इंटीजर्स के डिवाइजर्स का योग ढूंढना है जिनके ठीक चार डिवाइजर्स हैं। अगर ऐरे में ऐसा कोई इंटीजर नहीं है, तो 0 लौटाएं। उदाहरण के लिए, अगर इनपुट [21, 4, 7] है, तो आउटपुट 32 होगा, क्योंकि 21 के चार डिवाइजर्स हैं 1, 3, 7, 21, 4 के तीन डिवाइजर