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

C++ प्रोग्राम: अनसॉर्टेड सरणी में k निकटतम संख्याएं ज्ञात करना

मान लें हमारे पास कुछ तत्वों के साथ एक सरणी A है। सरणी अनसॉर्टेड है। हमारे पास दो अन्य मान X और k हैं। हमारा कार्य सरणी A से X की k निकटतम तत्वों की संख्या ज्ञात करना है। यदि तत्व X सरणी में मौजूद है, तो यह आउटपुट में नहीं दिखाया जाएगा। यदि A = [48, 50, 55, 30, 39, 35, 42, 45, 12, 16, 53, 22, 56] और X = 35, k = 4 है। आउटपुट 30, 39, 42, 45 होगा।

इसे हल करने के लिए, हम हीप डेटा संरचना का उपयोग करेंगे। चरण इस तरह दिखेंगे:

  • पहले k तत्वों के अंतर के साथ एक मैक्स-हीप बनाएं

  • k+1 वें तत्व से शुरू होने वाले प्रत्येक तत्व के लिए, इन चरणों को दोहराएं

    • वर्तमान तत्व और x के बीच अंतर ज्ञात करें

    • यदि अंतर हीप के रूट से अधिक है, तो वर्तमान तत्व को अनदेखा करें

    • अन्यथा रूट को हटाने के बाद वर्तमान तत्व को हीप में डालें

  • अंत में हीप में k निकटतम तत्व होंगे

उदाहरण

#include <iostream>
#include <queue>
using namespace std;

void findKClosestNumbers(int arr[], int n, int x, int k) {
    priority_queue> priorityQ;
    for (int i = 0; i < k; i++)
        priorityQ.push({ abs(arr[i] - x), i });
    for (int i = k; i < n; i++) {
        int diff = abs(arr[i] - x);
        if (diff > priorityQ.top().first)
            continue;
        priorityQ.pop();
        priorityQ.push({ diff, i });
    }
    while (priorityQ.empty() == false) {
        cout << arr[priorityQ.top().second] << " ";
        priorityQ.pop();
    }
}

int main() {
    int arr[] = {48, 50, 55, 30, 39, 35, 42, 45, 12, 16, 53, 22, 56};
    int x = 35, k = 5;
    int n = sizeof(arr) / sizeof(arr[0]);
    findKClosestNumbers(arr, n, x, k);
}

आउटपुट

45 42 30 39 35
  1. C++ में ऐरे में सभी अभाज्य संख्याओं का गुणनफल C++ में ऐरे में सभी अभाज्य संख्याओं का गुणनफल

    कुछ एलिमेंट्स के साथ एक इंटीजर ऐरे arr[] दिया गया है, कार्य उस ऐरे की सभी अभाज्य संख्याओं का गुणनफल निकालना है। अभाज्य संख्याएं वे संख्याएं होती हैं जो या तो 1 से विभाज्य होती हैं या स्वयं संख्या से, या एक अभाज्य संख्या वह संख्या है जो 1 और स्वयं संख्या को छोड़कर किसी अन्य संख्या से विभाज्य नहीं ह

  1. - C++ प्रोग्राम: संख्याओं के एरे के गुणनफल का पहला अंक ज्ञात करना

    इस लेख में, हम एक प्रोग्राम पर चर्चा करेंगे जो दिए गए एरे के तत्वों के गुणनफल का पहला अंक ज्ञात करता है। उदाहरण के लिए, मान लीजिए हमें एक एरे दिया गया है। arr = {12, 5, 16} तो इन तत्वों का गुणनफल 12*5*16 = 960 होगा। इसलिए, इस मामले में परिणाम यानी गुणनफल का पहला अंक 9 होगा। उदाहरण #include <bits

  1. - C++ प्रोग्राम: मीडियन के निकटतम k नंबर खोजना

    यह C++ प्रोग्राम एक सेट S (n नंबर्स) के मीडियन (Median) के निकटतम k नंबर खोजता है। यह क्विकसॉर्ट द्वारा सॉर्टिंग के बाद मीडियन के दोनों ओर से निकटतम तत्व चुनता है। एल्गोरिदम शुरुआत 1. फंक्शन Partition() - हाई पर पिवट के आधार पर ऐरे पार्टीशन करें 2. फंक्शन QuickSort() - क्विकसॉर्ट एल्गोरिदम से