मान लीजिए हमारे पास एक अनसॉर्टेड ऐरे A है, और दो संख्याएं x और y हैं। हमें A में x और y के बीच न्यूनतम दूरी खोजनी है। ऐरे में डुप्लीकेट तत्व भी हो सकते हैं। तो यदि ऐरे A = [2, 5, 3, 5, 4, 4, 2, 3] है, x = 3 और y = 2, तो 3 और 2 के बीच न्यूनतम दूरी केवल 1 है।
इसे हल करने के लिए, हमें इन चरणों का पालना करना होगा,
- ऐरे को बाएं से दाएं पार करें और रुकें यदि x या y मिल जाए। फिर उस स्थिति के इंडेक्स को prev में स्टोर करें
- अब prev इंडेक्स के बाद ऐरे को पार करें, यदि वर्तमान इंडेक्स i का तत्व x या y से मेल खाता है, तो जांचें कि क्या यह A[prev] से अलग है, यदि अलग है, तो न्यूनतम इंडेक्स को अपडेट करें यदि आवश्यक हो, यदि वे अलग हैं, तो prev को अपडेट करें जैसे prev := 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