मान लीजिए कि हमारे पास ए, बी और सी से तीन क्रमबद्ध सरणियाँ हैं, और क्रमशः ए, बी और सी से तीन तत्व i, j और k हैं जैसे कि max(|A[i] – B[i]|, |B[j] – C [k]|, |C[k] - A[i]|) को छोटा किया जाता है। तो अगर ए =[1, 4, 10], बी =[2, 15, 20], और सी =[10, 12], तो आउटपुट तत्व 10, 15, 10 हैं, ये तीनों ए, बी और सी से हैं।
मान लीजिए कि A, B और C का आकार क्रमशः p, q और r है। अब इसे हल करने के लिए इन चरणों का पालन करें -
- i :=0, j :=0 और k :=0
- अब निम्न कार्य करें जबकि i
- A[i], B[j] और C[k] का न्यूनतम और अधिकतम पता लगाएं
- अंतर की गणना करें:=अधिकतम (एक्स, वाई, जेड) - मिनट (ए [i], बी [जे], सी [के])
- यदि परिणाम वर्तमान परिणाम से कम है, तो इसे नए परिणाम में बदलें
- ऐरे के पॉइंटर को बढ़ाएँ जिसमें न्यूनतम हो।
उदाहरण
#include <iostream>
using namespace std;
void getClosestElements(int A[], int B[], int C[], int p, int q, int r) {
int diff = INT_MAX;
int i_final =0, j_final = 0, k_final = 0;
int i=0,j=0,k=0;
while (i < p && j < q && k < r) {
int min_element = min(A[i], min(B[j], C[k]));
int max_element = max(A[i], max(B[j], C[k]));
if (max_element-min_element < diff){
i_final = i, j_final = j, k_final = k;
diff = max_element - min_element;
}
if (diff == 0)
break;
if (A[i] == min_element)
i++;
else if (B[j] == min_element)
j++;
else
k++;
}
cout << A[i_final] << " " << B[j_final] << " " << C[k_final];
}
int main() {
int A[] = {1, 4, 10};
int B[] = {2, 15, 20};
int C[] = {10, 12};
int p = sizeof A / sizeof A[0];
int q = sizeof B / sizeof B[0];
int r = sizeof C / sizeof C[0];
cout << "Closest elements are: ";
getClosestElements(A, B, C, p, q, r);
} आउटपुट
Closest elements are: 10 15 10