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

C++ में लेक्सिकोग्राफिकल ऑर्डर में K-th सबसे छोटा

मान लीजिए हमारे पास दो मान n और k हैं। हमें 1 से n की सीमा में लेक्सिकोग्राफिक रूप से kth सबसे छोटा पूर्णांक ज्ञात करना है। इसलिए यदि इनपुट n =14 और k =3 जैसा है, तो आउटपुट 11 होगा, क्योंकि अनुक्रम [1, 10, 11, 12, 13, 14, 2, 3, 4, 5, 6, 7 होगा। , 8, 9], तो kth संख्या 11 है।

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

  • एक फ़ंक्शन को परिभाषित करें findKthNumber(), इसमें n, k,
  • लगेगा
  • करा :=1
  • (k 1 से घटाएं)
  • जबकि k गैर-शून्य है, करें −
    • चरण:=फ़ंक्शन को कॉल करें कैल्कस्टेप्स(n, curr, curr + 1)
    • यदि चरण <=k, तो −
      • k :=k - चरण
      • (कर को 1 से बढ़ाएं)
    • अन्यथा
      • करा :=curr * 10
      • k :=k - 1
    • वापसी का क्रम
  • एक फ़ंक्शन कैल्कस्टेप्स () को परिभाषित करें, इसमें नक्स, n1, n2,
  • लगेगा
  • रिट:=0
  • जबकि n1 <=nax, करें −
    • ret :=ret + न्यूनतम नक्स + 1 और n2 - n1
    • n1 :=n1 * 10
    • n2 :=n2 * 10
  • रिटर्न रिटर्न

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
   int findKthNumber(int n, int k) {
      int curr = 1;
      k--;
      while(k){
         int steps = calcSteps(n, curr, curr + 1);
         if(steps <= k){
            k -= steps;
            curr++;
         }else{
            curr *= 10;
            k -= 1;
         }
      }
      return curr;
   }
   int calcSteps(lli nax, lli n1, lli n2){
      int ret = 0;
      while(n1 <= nax){
         ret += min(nax + 1, n2) - n1;
         n1 *= 10;
         n2 *= 10;
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.findKthNumber(14,3));
}

इनपुट

14,3

आउटपुट

11

  1. सी++ में बीएसटी (बीएसटी में ऑर्डर सांख्यिकी) में के-वें सबसे छोटे तत्व का पता लगाएं

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है और इनपुट के रूप में एक मान K है, तो हमें ट्री में K-वें सबसे छोटा तत्व खोजना होगा। तो, अगर इनपुट पसंद है k =3, तो आउटपुट 15 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - फ़ंक्शन को परिभाषित करें find_kth_smallest(), यह रूट लेगा, काउंट, k,

  1. सी ++ में अवरोही क्रम में एक वेक्टर को सॉर्ट करना

    सी ++ में वेक्टर को सॉर्ट करना std ::सॉर्ट() का उपयोग करके किया जा सकता है। इसे हेडर में परिभाषित किया गया है। एक स्थिर प्रकार प्राप्त करने के लिए std::stable_sort का उपयोग किया जाता है। यह बिल्कुल सॉर्ट () जैसा है लेकिन समान तत्वों के सापेक्ष क्रम को बनाए रखता है। आवश्यकता के अनुसार क्विकसॉर्ट (),

  1. C++ प्रोग्राम को लेक्सिकोग्राफिकल ऑर्डर (डिक्शनरी ऑर्डर) में तत्वों को सॉर्ट करने के लिए

    लेक्सिकोग्राफिकल ऑर्डर से पता चलता है कि किसी सूची में शब्दों को उनके अक्षरों के अनुसार वर्णानुक्रम के आधार पर कैसे क्रमबद्ध किया जाता है। उदाहरण के लिए - List of words: Harry Adam Sam Lexicographical order of words: Adam Harry Sam लेक्सिकोग्राफिकल क्रम में तत्वों को छाँटने का कार्यक्रम इस प्रकार