在 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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP