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

C++ में K-वां सबसे छोटा अभाज्य भिन्न (K-th Smallest Prime Fraction)


मान लीजिए हमारे पास एक क्रमबद्ध सूची है, इसमें 1 और कुछ अभाज्य संख्याएं हैं, अब सूची में प्रत्येक p < q के लिए, हम भिन्न p/q पर विचार करेंगे, फिर हमें ज्ञात करना है कि k-वां सबसे छोटा भिन्न कौन सा है। हमें उत्तर के रूप में एक ऐरे वापस करना है, ताकि ans[0] p हो और ans[1] q हो।

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

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

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

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

उदाहरण

#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-वां सबसे छोटा तत्व ढूंढना है। हमें उस सरणी से kवां सबसे छोटा तत्व ढूंढना है जो रेंज को मिलाकर बनाई गई है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट: ranges = {{2, 5}, {7, 9}, {12, 15}}, k = 9 आउटपुट: 13 व

  1. - C++ में बिटवाइज सीव (Bitwise Sieve)

    इस समस्या में, हमें एक संख्या N दी गई है। हमारा कार्य बिटवाइज सीव (Bitwise Sieve) का उपयोग करके N से छोटी सभी अभाज्य संख्याओं को ढूंढना है। बिटवाइज सीव, एराटोस्थनीज की छलनी (Sieve of Eratosthenes) का एक अनुकूलित संस्करण है जिसका उपयोग दी गई संख्या से छोटी सभी अभाज्य संख्याओं को ढूंढने के लिए किया

  1. C++ में BST में k-वां सबसे छोटा तत्व खोजें (BST में ऑर्डर स्टैटिस्टिक्स) C++ में BST में k-वां सबसे छोटा तत्व खोजें (BST में ऑर्डर स्टैटिस्टिक्स)

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