Element Appearing More Than 25% In Sorted Array

easy search sorted array

Problem

Given a sorted array of integers, there is exactly one integer that appears more than 25% of the time. Return that integer.

Inputarr = [1, 2, 2, 6, 6, 6, 6, 7, 10]
Output6
n = 9 so a 25% element appears more than 2 times. 6 appears 4 times — it is also arr[i] == arr[i + n/4] at i = 3.

def find_special_integer(arr):
    n = len(arr)
    step = n // 4
    for i in (0, step, 2 * step, 3 * step):
        if arr[i] == arr[i + step]:
            return arr[i]
    return arr[0]
function findSpecialInteger(arr) {
  const n = arr.length;
  const step = Math.floor(n / 4);
  for (const i of [0, step, 2 * step, 3 * step]) {
    if (arr[i] === arr[i + step]) return arr[i];
  }
  return arr[0];
}
class Solution {
    public int findSpecialInteger(int[] arr) {
        int n = arr.length;
        int step = n / 4;
        int[] candidates = { 0, step, 2 * step, 3 * step };
        for (int i : candidates) {
            if (arr[i] == arr[i + step]) return arr[i];
        }
        return arr[0];
    }
}
int findSpecialInteger(vector<int>& arr) {
    int n = (int)arr.size();
    int step = n / 4;
    for (int i : { 0, step, 2 * step, 3 * step }) {
        if (arr[i] == arr[i + step]) return arr[i];
    }
    return arr[0];
}
Time: O(1) candidates × O(log n) optional binary search = O(log n) Space: O(1)