Find the minimum distance between two numbers - GeeksforGeeks
Given an unsorted array arr[] and two numbers x and y, find the minimum distance between x and y in arr[]. The array might also contain duplicates. You may assume that both x and y are different and present in arr[].
Input: arr[] = {2, 5, 3, 5, 4, 4, 2, 3}, x = 3, y = 2
Output: Minimum distance between 3 and 2 is 1.
Scan array and maintain some properties.
O(N)
1) Traverse array from left side and stop if either x or y are found. Store index of this first occurrrence in a variable say prev
2) Now traverse arr[] after the index prev. If the element at current index i matches with either x or y then check if it is different from arr[prev]. If it is different then update the minimum distance if needed. If it is same then update prev i.e., make prev = i.
O(N^2)
Linkedin Interview - Shortest distance between two words
Given an unsorted array arr[] and two numbers x and y, find the minimum distance between x and y in arr[]. The array might also contain duplicates. You may assume that both x and y are different and present in arr[].
Input: arr[] = {2, 5, 3, 5, 4, 4, 2, 3}, x = 3, y = 2
Output: Minimum distance between 3 and 2 is 1.
Scan array and maintain some properties.
O(N)
1) Traverse array from left side and stop if either x or y are found. Store index of this first occurrrence in a variable say prev
2) Now traverse arr[] after the index prev. If the element at current index i matches with either x or y then check if it is different from arr[prev]. If it is different then update the minimum distance if needed. If it is same then update prev i.e., make prev = i.
int minDist(int arr[], int n, int x, int y){ int i = 0; int min_dist = INT_MAX; int prev; // Find the first occurence of any of the two numbers (x or y) // and store the index of this occurence in prev for (i = 0; i < n; i++) { if (arr[i] == x || arr[i] == y) { prev = i; break; } } // Traverse after the first occurence for ( ; i < n; i++) { if (arr[i] == x || arr[i] == y) { // If the current element matches with any of the two then // check if current element and prev element are different // Also check if this value is smaller than minimm distance so far if ( arr[prev] != arr[i] && (i - prev) < min_dist ) { min_dist = i - prev; prev = i; } else prev = i; } } return min_dist;}O(N^2)
int minDist(int arr[], int n, int x, int y){ int i, j; int min_dist = INT_MAX; for (i = 0; i < n; i++) { for (j = i+1; j < n; j++) { if( (x == arr[i] && y == arr[j] || y == arr[i] && x == arr[j]) && min_dist > abs(i-j)) { min_dist = abs(i-j); } } } return min_dist;}This class will be given a list of words (such as might be tokenized
* from a paragraph of text), and will provide a method that takes two
* words and returns the shortest distance (in words) between those two
* words in the provided text.
- public int findShortestDist(String[] words, String wordA, String wordB) {
- int n = words.length;
- int dist = n;
- int posA = -1, posB = -1;
- for(int i=0; i<n; i++) {
- if(words[i].equals(wordA)) {
- posA = i;
- if(posB != -1) {
- dist = Math.min(dist, posA-posB);
- }
- } else if(words[i].equals(wordB)) {
- posB = i;
- if(posA != -1) {
- dist = Math.min(dist, posB-posA);
- }
- }
- }
- return (posA == -1 || posB == -1) ? -1 : dist;
- }
- public int findShortestDist(String[] words, String wordA, String wordB) {
- int n = words.length;
- int dist = n+1;
- int posA = -1, posB = -1;
- for(int i=0; i<n; i++) {
- if(words[i].equals(wordA)) {
- posA = i;
- } else if(words[i].equals(wordB)) {
- posB = i;
- }
- if(posA != -1 && posB != -1) {
- dist = Math.min(dist, Math.abs(posA-posB));
- }
- }
- return dist > n ? -1 : dist;
- }
http://www.careercup.com/question?id=5725709041401856
JavaScript Code: http://codesam.blogspot.com/2011/07/minimun-distance-between-two-elements.html
Read full article from Find the minimum distance between two numbers - GeeksforGeeksJavaScript Code: http://codesam.blogspot.com/2011/07/minimun-distance-between-two-elements.html