สมมติว่าเรามีอาร์เรย์ที่เรียงลำดับหนึ่งรายการที่มีองค์ประกอบ 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