मान लीजिए कि हमारे पास एक क्रमबद्ध सरणी A है, और दो संख्याएँ x और y हैं। हमें A में x और y के बीच की न्यूनतम दूरी ज्ञात करनी है। सरणी में डुप्लिकेट तत्व भी हो सकते हैं। इसलिए यदि सरणी A =[2, 5, 3, 5, 4, 4, 2, 3], x =3 और y =2 है, तो 3 और 2 के बीच की न्यूनतम दूरी सिर्फ 1 है।
इसे हल करने के लिए, हमें इन चरणों का पालन करना होगा,
- सरणी को बाएं से दाएं पार करें और यदि x या y में से कोई भी मिल जाए तो रुक जाएं। फिर उस स्थिति की अनुक्रमणिका को प्रचलित में संग्रहीत करें
- अब अनुक्रमणिका प्रचलित के बाद सरणी को पार करें, यदि वर्तमान अनुक्रमणिका वाला तत्व x या y के साथ मेल खाता है, तो जांचें कि क्या यह A [पिछला] से भिन्न है, यदि वह भिन्न है, तो यदि आवश्यक हो तो न्यूनतम अनुक्रमणिका को अद्यतन करें , यदि वे भिन्न हैं, तो पिछला अद्यतन करें जैसा कि पिछला:=i
उदाहरण
#include<iostream>
using namespace std;
int findMinDistance(int A[], int n, int x, int y) {
int i = 0;
int distance = INT_MAX;
int prev_index;
for (i = 0; i < n; i++) {
if (A[i] == x || A[i] == y) {
prev_index = i;
break;
}
}
while (i < n) {
if (A[i] == x || A[i] == y) {
if ( A[prev_index] != A[i] && (i - prev_index) < distance ){
distance = i - prev_index;
prev_index = i;
} else
prev_index = i;
}
i++;
}
return distance;
}
int main() {
int arr[] = {2, 5, 3, 5, 4, 4, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 3;
int y = 2;
cout << "Minimum distance between " << x << " and " << y << " is: "<< findMinDistance(arr, n, x, y);
} आउटपुट
Minimum distance between 3 and 2 is: 1