在 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] 不同,如果不同,則根據需要更新 min 索引,如果不同,則將 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

更新於: 18-12-2019

920 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.