Fixed Point

easy binary search array

Problem

Given an array of distinct integers arr sorted in ascending order, return the smallest index i that satisfies arr[i] == i. If there is no such index, return -1.

Inputarr = [-10, -5, 0, 3, 7]
Output3
For i = 3, arr[3] == 3, so the answer is 3.

def fixed_point(arr):
    lo, hi = 0, len(arr) - 1
    ans = -1
    while lo <= hi:
        mid = (lo + hi) // 2
        if arr[mid] >= mid:
            if arr[mid] == mid:
                ans = mid
            hi = mid - 1
        else:
            lo = mid + 1
    return ans
function fixedPoint(arr) {
  let lo = 0, hi = arr.length - 1, ans = -1;
  while (lo <= hi) {
    const mid = (lo + hi) >> 1;
    if (arr[mid] >= mid) {
      if (arr[mid] === mid) ans = mid;
      hi = mid - 1;
    } else {
      lo = mid + 1;
    }
  }
  return ans;
}
class Solution {
    public int fixedPoint(int[] arr) {
        int lo = 0, hi = arr.length - 1, ans = -1;
        while (lo <= hi) {
            int mid = (lo + hi) >>> 1;
            if (arr[mid] >= mid) {
                if (arr[mid] == mid) ans = mid;
                hi = mid - 1;
            } else {
                lo = mid + 1;
            }
        }
        return ans;
    }
}
int fixedPoint(vector<int>& arr) {
    int lo = 0, hi = (int)arr.size() - 1, ans = -1;
    while (lo <= hi) {
        int mid = (lo + hi) / 2;
        if (arr[mid] >= mid) {
            if (arr[mid] == mid) ans = mid;
            hi = mid - 1;
        } else {
            lo = mid + 1;
        }
    }
    return ans;
}
Time: O(log n) Space: O(1)