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

C++ में अगला बड़ा तत्व III


मान लीजिए हमारे पास एक धनात्मक 32-बिट पूर्णांक n है, हमें सबसे छोटा 32-बिट पूर्णांक ढूंढना है जिसमें पूर्णांक n में मौजूद वही अंक हों और जो n से मान में बड़ा हो। यदि ऐसा कोई धनात्मक 32-बिट पूर्णांक नहीं है, तो -1 लौटाएं।

इसलिए यदि संख्या 213 है, तो परिणाम 231 होगा।

हल का दृष्टिकोण

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

  • s := n को स्ट्रिंग के रूप में, sz := s का आकार, ok := false
  • i = sz-2 से 0 तक:
    • यदि s[i] < s[i+1], तो ok := true और लूप तोड़ें
  • यदि ok false है, तो -1 लौटाएं
  • smallest := i, curr := i+1
  • j = i+1 से sz-1 तक:
    • यदि s[j] > s[smallest] और s[j] <= s[curr], तो curr := j
  • s[smallest] को s[curr] के साथ बदलें
  • aux := s का उपस्ट्रिंग इंडेक्स 0 से smallest तक
  • aux को उल्टा करें
  • ret := s का उपस्ट्रिंग इंडेक्स 0 से smallest+1 तक + aux
  • यदि ret > 32-बिट धनात्मक पूर्णांक सीमा तो -1 लौटाएं, अन्यथा ret

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

class Solution { 
public: 
    int nextGreaterElement(int n) { 
        string s = to_string(n); 
        int sz = s.size(); 
        int i; 
        bool ok = false; 
        for(i = sz - 2; i >= 0; i--){ 
            if(s[i] < s[i + 1]) { 
                ok = true; 
                break; 
            } 
        } 
        if(!ok) return -1; 
        int smallest = i; 
        int curr = i + 1; 
        for(int j = i + 1; j < sz; j++){ 
            if(s[j] > s[smallest] && s[j] <= s[curr]){ 
                curr = j; 
            } 
        } 
        swap(s[smallest], s[curr]); 
        string aux = s.substr(smallest + 1); 
        reverse(aux.begin(), aux.end()); 
        string ret = s.substr(0, smallest + 1) + aux; 
        return stol(ret) > INT_MAX ? -1 : stol(ret); 
    } 
}; 

int main(){ 
    Solution ob; 
    cout << (ob.nextGreaterElement(213)); 
}

इनपुट

213

आउटपुट

231

  1. - C++ में अग्ली नंबर III

    मान लीजिए हमें n-वां अग्ली नंबर ढूंढने के लिए एक प्रोग्राम लिखना है। अग्ली नंबर वे पॉजिटिव इंटीजर्स हैं जो a या b या c से डिविजिबल होते हैं। उदाहरण के लिए, अगर n = 3 और a = 2, b = 3 और c = 5, तो आउटपुट 4 होगा, क्योंकि अग्ली नंबर्स हैं [2,3,4,5,6,8,9,10], तीसरा वाला 4 है। इसे हल करने के लिए, हम इन स

  1. - C++ में Next Greater Element II

    मान लीजिए हमारे पास एक वृत्ताकार सरणी (circular array) है (सरणी का अंतिम तत्व का अगला तत्व सरणी का पहला तत्व है), हमें हर तत्व के लिए अगली बड़ी संख्या (Next Greater Number) प्रदर्शित करनी है। यहां एक संख्या x की अगली बड़ी संख्या सरणी में उसकी अनुक्रमण क्रम में अगली पहली बड़ी संख्या है, इसका मतलब है

  1. - C++ में पिछला बड़ा एलिमेंट

    इस समस्या में, हमें एक ऐरे दिया गया है। हमारा कार्य ऐरे में वर्तमान एलिमेंट से पहले आने वाले सबसे बड़े एलिमेंट को लौटाना है अन्यथा -1 प्रिंट करना है।समस्या को समझने के लिए एक उदाहरण लेते हैंInput: {6, 2, 7, 1, 5, 3} Output: -1, 6, -1, 7, 7, 7इस समस्या को हल करने के लिए, एक आसान और स्पष्ट समाधान नेस्