কম্পিউটার টিউটোরিয়াল

C++-এ পরবর্তী বড়তর উপাদান III


ধরুন আমাদের একটি ধনাত্মক 32-বিট পূর্ণসংখ্যা n আছে, আমাদের সবচেয়ে ছোট 32-বিট পূর্ণসংখ্যা খুঁজে বের করতে হবে যাতে এটি n-এ বিদ্যমান একই অঙ্কগুলিকে ধারণ করে এবং n-এর চেয়ে মান বড়। যদি এমন কোনো ধনাত্মক 32-বিট পূর্ণসংখ্যা না থাকে, তবে -1 ফেরত দিন।

তাই যদি সংখ্যা 213 হয়, তবে ফলাফল হবে 231।

এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব −

  • s := n স্ট্রিং হিসেবে, sz := s-এর আকার, ok := false
  • i = sz – 2 থেকে ০ পর্যন্ত
    • যদি s[i] < s[i + 1], তবে ok := true এবং লুপ ভাঙুন
  • যদি ok false হয়, তবে – ১ ফেরত দিন
  • smallest := i, curr := i + 1
  • j = i + 1 থেকে sz – ১ পর্যন্ত
    • যদি s[j] > s[smallest] এবং s[j] <= s[curr], তবে curr := j
  • s[smallest] এবং s[curr] বদলান
  • aux := s-এর সাবস্ট্রিং ইনডেক্স ০ থেকে smallest পর্যন্ত
  • aux উল্টান
  • ret := s-এর সাবস্ট্রিং ইনডেক্স ০ থেকে smallest + ১ + 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);    } }; main(){    Solution ob;    cout << (ob.nextGreaterElement(213)); }

ইনপুট

213

আউটপুট

231

  1. সি++-এ RLE ইটেরেটর (RLE Iterator)

  2. C++-এ অগ্লি নাম্বার III

  3. C++-এ Next Greater Element II

  4. C++-এ অ্যারেতে পূর্ববর্তী সর্বোচ্চ উপাদান (Previous Greater Element)