Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 두 숫자 사이의 최소 거리 찾기

<시간/>

정렬되지 않은 배열 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