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

C++ में दो सॉर्टेड ऐरे से निकटतम पेयर ढूंढना


मान लें हमारे पास दो सॉर्टेड ऐरे और एक संख्या x है, हमें वह पेयर ढूंढना है जिसका योग x के निकटतम हो। और पेयर में प्रत्येक ऐरे से एक तत्व हो। हमारे पास दो ऐरे A1[0..m-1] और A2[0..n-1] हैं, और एक अन्य मान x है। हमें पेयर A1[i] + A2[j] ढूंढना है जैसे कि (A1[i] + A2[j] - x) का निरपेक्ष मान न्यूनतम हो। इसलिए यदि A1 = [1, 4, 5, 7], और A2 = [10, 20, 30, 40], और x = 32, तो आउटपुट 1 और 30 होगा।

हम A1 के बाएं से और A2 के दाएं से शुरू करेंगे, फिर ऐसे पेयर को ढूंढने के लिए इन चरणों का पालन करेंगे:

  • diff प्रारंभ करें, यह पेयर और x के बीच का अंतर रखेगा।
  • दो पॉइंटर प्रारंभ करें left := 0 और right := n - 1।
  • जब तक left <= m और right >= 0, करें:
    • यदि |A1[left] + A2[right] - sum| < diff, तो:
      • diff और परिणाम अपडेट करें।
    • यदि (A1[left] + A2[right]) < sum, तो:
      • left को 1 से बढ़ाएं।
    • अन्यथा:
      • right को 1 से घटाएं।
  • परिणाम प्रदर्शित करें।

उदाहरण

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

void findClosestPair(int A1[], int A2[], int m, int n, int x) {
    int diff = INT_MAX;
    int left_res, right_res;
    int left = 0, right = n - 1;
    while (left < m && right >= 0) {
        if (abs(A1[left] + A2[right] - x) < diff) {
            left_res = left;
            right_res = right;
            diff = abs(A1[left] + A2[right] - x);
        }
        if (A1[left] + A2[right] > x)
            right--;
        else
            left++;
    }
    cout << "The closest pair is [" << A1[left_res] << ", " << A2[right_res] << "]";
}

int main() {
    int ar1[] = {1, 4, 5, 7};
    int ar2[] = {10, 20, 30, 40};
    int m = sizeof(ar1) / sizeof(ar1[0]);
    int n = sizeof(ar2) / sizeof(ar2[0]);
    int x = 32;
    findClosestPair(ar1, ar2, m, n, x);
}

आउटपुट

The closest pair is [1, 30]
  1. - C++ में दो सरणियों के योग को बराबर करने वाली जोड़ी ढूंढें

    समस्या विवरण दो सरणियां दी गई हैं जिनमें अलग-अलग संख्या में तत्व हैं। हमें एक जोड़ी (x, y) ढूंढनी है जहां x पहली सरणी में है और y दूसरी सरणी में है। इस जोड़ी को स्वैप करने के बाद दोनों सरणियों का योग बराबर होना चाहिए। उदाहरण: सरणी A = [4, 1, 2, 2, 1, 1] (योग = 11) और सरणी B = [3, 3, 6, 3] (योग = 1

  1. - जावा प्रोग्राम: दो सॉर्टेड ऐरे से सबसे नजदीकी जोड़ी ढूंढना

    उदाहरणpublic class Demo { void closestPair(int myArr1[], int myArr2[], int arr1Len, int arr2Len, int sum) { int diff = Integer.MAX_VALUE; int resultL = 0, resultR = 0; int l = 0, r = arr2Len - 1; while (l = 0) { if (Math.abs(myArr1[l] +

  1. पायथन प्रोग्राम: दो क्रमबद्ध सरणियों से निकटतम जोड़ी खोजें पायथन प्रोग्राम: दो क्रमबद्ध सरणियों से निकटतम जोड़ी खोजें

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें दो सरणियाँ दी गई हैं, हमें दो क्रमबद्ध सरणियों से निकटतम जोड़ी खोजने की आवश्यकता है। उदाहरण # sys मॉड्यूल import sys # जोड़ी def print_(ar1, ar2, m, n, x): # अंतर diff = sys.maxsize # इंडेक्स l = 0 r = n-1