在 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 次

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.