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

सी++ में अगला ग्रेटर एलिमेंट III

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

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

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

  • s :=n स्ट्रिंग के रूप में, sz :=s का आकार, ठीक :=false
  • मैं के लिए रेंज sz – 2 से 0
      . में
    • अगर s[i]
  • अगर का गलत है, तो वापस करें - 1
  • सबसे छोटा :=i, curr :=i + 1
  • j के लिए i + 1 से sz – 1 की श्रेणी में
    • आईडी s[j]> s[सबसे छोटा] और s[j] <=s[curr], फिर curr :=j
  • एक्सचेंज एस[सबसे छोटा] एस के साथ[कर्र]
  • ऑक्स:=इंडेक्स 0 से सबसे छोटे में s का सबस्ट्रिंग
  • रिवर्स ऑक्स
  • ret :=इंडेक्स 0 से सबसे छोटे + aux में s का सबस्ट्रिंग
  • रिटर्न -1 अगर रिट है> 32-बिट +ve इंटीजर रेंज, अन्यथा रेट करें

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

उदाहरण

#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);
   }
};
main(){
   Solution ob;
   cout << (ob.nextGreaterElement(213));
}

इनपुट

213

आउटपुट

231

  1. C++ . में बदसूरत संख्या III

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

  1. सी++ में अगला ग्रेटर एलिमेंट II

    मान लें कि हमारे पास एक गोलाकार सरणी है (अंतिम तत्व का अगला तत्व सरणी का पहला तत्व है), हमें प्रत्येक तत्व के लिए अगला ग्रेटर नंबर प्रदर्शित करना होगा। यहां एक संख्या x की अगली बड़ी संख्या, सरणी में इसके ट्रैवर्सिंग-ऑर्डर की पहली बड़ी संख्या है, इसका मतलब है कि हम इसकी अगली बड़ी संख्या को खोजने के ल

  1. सी ++ में पिछला बड़ा तत्व

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