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

C++ में सरणी में सभी तत्व युग्मों के बीच k-वां सबसे छोटा अंतर ज्ञात करने का प्रोग्राम

मान लीजिए हमें कई पूर्णांक संख्याओं वाली एक सूची दी गई है। हमें सरणी में मानों के प्रत्येक युग्म के बीच का अंतर ढूंढना है और k-वां सबसे छोटा अंतर नंबर ढूंढना है। सूचकांक 0 से शुरू होता है और मान k हमें इनपुट के रूप में दिया जाता है।

तो, यदि इनपुट numbers = {2, 6, 4, 8}, k = 2 है, तो आउटपुट 2 होगा।

युग्मों के बीच अंतर हैं:

(2, 6) = 4

(2, 4) = 2

(2, 8) = 6

(6, 4) = 2

(6, 8) = 2

(4, 8) = 4

यदि हम मानों को क्रमबद्ध करते हैं, तो यह 2, 2, 2, 4, 4, 6 बन जाता है। 2-रा सबसे छोटा मान 2 है। (सूचकांक 0 से शुरू होता है)।

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

  • k को 1 से बढ़ाएं
  • इनपुट सरणी को क्रमबद्ध करें
  • le := 0
  • ri := इनपुट का अंतिम तत्व - इनपुट का पहला आइटम
  • जब le < ri, करें:
    • mid := (le + ri) / 2
    • tmp := 0
    • lp := 0
    • i := 1 से प्रारंभ करें, जब i < इनपुट का आकार, अपडेट करें (i को 1 से बढ़ाएं), करें:
      • जब input[i] - input[lp] > mid, करें:
        • lp := lp + 1
      • tmp := tmp + i - lp
    • यदि tmp >= k, तो:
      • ri := mid
    • अन्यथा:
      • le := mid + 1
  • le लौटाएं

उदाहरण

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

#include<bits/stdc++.h>
using namespace std;

int solve(vector<int>& input, int k) {
    k++;
    sort(input.begin(), input.end());
    int le = 0;
    int ri = input.back() - input[0];
    while (le < ri) {
        int mid = (le + ri) / 2;
        long long tmp = 0;
        int lp = 0;
        for (int i = 1; i < input.size(); i++) {
            while (input[i] - input[lp] > mid) lp++;
            tmp += i - lp;
        }
        if (tmp >= k) ri = mid;
        else le = mid + 1;
    }
    return le;
}

int main() {
    vector<int> numbers = {2, 6, 4, 8};
    cout << solve(numbers, 2) << endl;
    return 0;
}

इनपुट

vector<int> numbers = {2, 6, 4, 8};
cout << solve(numbers, 2) << endl;

आउटपुट

2
  1. - C++ में सरणी का सबसे बड़ा एलिमेंट खोजने का प्रोग्राम

    एक सरणी में कई एलिमेंट्स होते हैं और सरणी में सबसे बड़ा एलिमेंट वह होता है जो अन्य एलिमेंट्स से बड़ा होता है। उदाहरण के लिए। 5 1 7 2 4 उपरोक्त सरणी में, 7 सबसे बड़ा एलिमेंट है और यह इंडेक्स 2 पर है। सरणी का सबसे बड़ा एलिमेंट खोजने का एक प्रोग्राम निम्नलिखित है। उदाहरण #include <iostream>

  1. - C# में सरणी से न्यूनतम (सबसे छोटा) तत्व प्राप्त करना

    C# में किसी सरणी या संग्रह से सबसे छोटा तत्व प्राप्त करने के लिए LINQ का Min() मेथड सबसे सरल और पठनीय तरीका है। यह System.Linq नेमस्पेस में उपलब्ध है। उदाहरण using System; using System.Linq; class Demo { static void Main() { int[] arr = { 5, 9, 2, 7 }; // Min() मे

  1. - C# प्रोग्राम 2D सरणी में K-वां सबसे छोटा तत्व ढूंढने के लिए

    एक 2D सरणी घोषित करें: int[] a = new int[] { 65, 45, 32, 97, 23, 75, 59 }; मान लें कि आप Kवां सबसे छोटा यानी 5वां सबसे छोटा पूर्णांक चाहते हैं। पहले सरणी को सॉर्ट करें: Array.Sort(a); 5वां सबसे छोटा तत्व प्राप्त करने के लिए: a[k - 1]; आइए पूरा कोड देखें: उदाहरण using Sys