Find Smallest Letter Greater Than Target

easy array binary search

Problem

Given a sorted array of distinct lowercase letters and a target letter, find the smallest element in the array that is strictly greater than target. The letters wrap around — if every letter ≤ target, return letters[0].

Inputletters = ["c", "f", "j"], target = "a"
Output"c"
First letter strictly greater than 'a' is 'c'.

def next_greatest_letter(letters, target):
    lo, hi = 0, len(letters)
    while lo < hi:
        mid = (lo + hi) // 2
        if letters[mid] <= target:
            lo = mid + 1
        else:
            hi = mid
    return letters[lo % len(letters)]
function nextGreatestLetter(letters, target) {
  let lo = 0, hi = letters.length;
  while (lo < hi) {
    const mid = (lo + hi) >> 1;
    if (letters[mid] <= target) lo = mid + 1;
    else hi = mid;
  }
  return letters[lo % letters.length];
}
class Solution {
    public char nextGreatestLetter(char[] letters, char target) {
        int lo = 0, hi = letters.length;
        while (lo < hi) {
            int mid = (lo + hi) >>> 1;
            if (letters[mid] <= target) lo = mid + 1;
            else hi = mid;
        }
        return letters[lo % letters.length];
    }
}
class Solution {
public:
    char nextGreatestLetter(vector<char>& letters, char target) {
        int lo = 0, hi = letters.size();
        while (lo < hi) {
            int mid = (lo + hi) / 2;
            if (letters[mid] <= target) lo = mid + 1;
            else hi = mid;
        }
        return letters[lo % letters.size()];
    }
};
Time: O(log n) Space: O(1)