Solution #1: Below is the code with explanation in comments,
int minDistance(int* arr, int len, int x, int y) { int prevIndex = -1; int min = INT_MAX; int i=0; int first; int second; int distance; for(i=0; i < len; i++) { if((arr[i] == x) || (arr[i] == y)) { //first time encounter with x or y //'first' stores either x or y, depending on //which is encountered first if(prevIndex == -1) { first = (arr[i]==x)?x:y; second = (arr[i]==x)?y:x; prevIndex = i; } else { //if arr[i] is same as 'first', reset prevIndex if(arr[i] == first) prevIndex = i; //if arr[i] is different from 'first', calculate distance else { distance = i - prevIndex; prevIndex = i; min = MIN(min, distance); //swap first and second int temp = first; first = second; second = temp; } } } } return min; } int main() { int arr[] ={2, 3, 4, 6, 6, 7, 5, 1, 4}; int len = sizeof(arr)/sizeof(int); printf("MIN DISTANCE: %d\n", minDistance(arr, len, 4, 5)); return 0; }
No comments:
Post a Comment