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

C++ में K-वें सबसे छोटा अभाज्य अंश

मान लीजिए कि हमारे पास एक क्रमबद्ध सूची है, 1 और कुछ अभाज्य संख्याएँ हैं, अब सूची में प्रत्येक p

तो अगर इनपुट [1,3,5,7], और के =2 जैसा है, तो उत्तर 1/5 होगा, क्योंकि अंश 1/3, 1/5, 1/7, 3/5 हैं, 3/7, 5/7, दूसरा सबसे छोटा 1/5 है।

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

  • डेटा को परिभाषित करें, इसमें a, b और a/b लगेगा
  • आकार 2 के सरणी रेट को परिभाषित करें
  • n :=A का आकार
  • एक प्राथमिकता कतार pq परिभाषित करें
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • पीक्यू में डेटा (ए [0], ए [i], 0) डालें
  • जबकि K गैर-शून्य है, करें −
    • अस्थायी =pq का शीर्ष तत्व
    • पीक्यू से तत्व हटाएं
    • यदि K, 0 के समान है, तो −
      • ret[0] :=a अस्थायी
      • ret[1] :=b का तापमान
      • रिटर्न रिटर्न
    • यदि temp.idx + 1
    • idx :=अस्थायी + 1 का idx
    • pq में डेटा (A[idx], temp.b, idx) डालें
  • K को 1 से घटाएं
  • रिटर्न रिटर्न
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<auto> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    struct Data{
       double val, a, b;
       int idx;
       Data(double a, double b, int c){
          val = a / b;
          this->a = a;
          this->b = b;
          idx = c;
       }
    };
    struct Comparator{
       bool operator()(Data a, Data b){
          return !(a.val < b.val);
       }
    };
    class Solution {
    public:
       vector<int> kthSmallestPrimeFraction(vector<int>& A, int K) {
          vector <int> ret(2);
          int n = A.size();
          priority_queue <Data, vector <Data>, Comparator> pq;
          for(int i = 0; i < n; i++){
             pq.push(Data(double(A[0]), double(A[i]), 0));
          }
          while(K--){
             Data temp = pq.top();
             pq.pop();
             if(K == 0){
                ret[0] = temp.a;
                ret[1] = temp.b;
                return ret;
             }
             if(temp.idx + 1 < n){
                int idx = temp.idx + 1;
                pq.push(Data(double(A[idx]), double(temp.b), idx));
             }
          }
          return ret;
       }
    };
    main(){
       Solution ob;
       vector<int> v = {1,3,5,7};
       print_vector(ob.kthSmallestPrimeFraction(v, 2));
    }

    इनपुट

    {1,3,5,7}
    2

    आउटपुट

    [1, 5, ]

    1. C++ में दिए गए n श्रेणियों में k-वें सबसे छोटा तत्व खोजें

      इस समस्या में, हमें n श्रेणी और एक पूर्णांक k दिया गया है। हमारा कार्य दिए गए n श्रेणियों में k-वें सबसे छोटे तत्व को खोजना है। हमें सरणी से kth सबसे छोटे तत्वों को खोजने की आवश्यकता है जो श्रेणियों के संयोजन के बाद बनाई गई हैं। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट: रेंज ={{2, 5},

    1. C++ में बिटवाइज़ चलनी

      इस समस्या में, हमें एक नंबर N दिया जाता है। हमारा काम बिटवाइज़ चलनी का उपयोग करके N से छोटी सभी अभाज्य संख्याओं को खोजना है। बिटवाइज़ चलनी, सीव ऑफ़ एराटोस्थनीज़ का एक अनुकूलित संस्करण है जिसका उपयोग दी गई संख्या से छोटी सभी अभाज्य संख्याओं को खोजने के लिए किया जाता है। समस्या को समझने के लिए एक उद

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

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