在 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
广告