在 C++ 中查找排序数组中带有重复元素的等值(或中间)点


假设我们有一个包含 n 个元素的已排序数组。该数组已排序。我们必须查找数组中是否存在一个元素,该元素的小于它的元素数量与大于它的元素数量相同。如果该等值点在数组中出现多次,则返回第一次出现的索引。如果没有这样的点,则返回 -1。假设元素类似于 A = [1, 1, 2, 3, 3, 3, 3, 3],则等值点位于索引 2 处,元素为 A[2] = 2。因为它只有一个较小的元素 1,和一个较大的元素 3。

我们将创建一个辅助数组来存储所有不同的元素。如果不同元素的数量为偶数,则我们找不到任何等值点,否则中间元素将是中点。

示例

 在线演示

#include<iostream>
using namespace std;
int searchEqualPoint(int arr[], int n) {
   int aux_arr[n];
   int i = 0, aux_index = 0;
   while (i < n) {
      aux_arr[aux_index++] = i++;
      while (i<n && arr[i] == arr[i-1])
         i++;
   }
   return (aux_index & 1)? aux_arr[aux_index>>1] : -1;
}
int main() {
   int arr[] = {1, 1, 2, 3, 3, 3, 3, 3};
   int n = sizeof(arr)/sizeof(arr[0]);
   int index = searchEqualPoint(arr, n);
   if (index != -1)
      cout << "Equal Point is: " << arr[index];
   else
      cout << "No Equal Point exists";
}

输出

Equal Point is: 2

更新于:2019-12-18

浏览量 106 次

开启你的职业生涯

完成课程获得认证

开始学习
广告