744. Find Smallest Letter Greater Than Target

Approach 1: Binary Search using `bisect`

`class Solution(object):    def nextGreatestLetter(self, letters, target):        """        :type letters: List[str]        :type target: str        :rtype: str        """        index = bisect.bisect(letters, target)        return letters[index % len(letters)]`

As the documentation of bisect reads, bisect.bisect returns an insertion point which comes after (to the right of) any existing entries of target in letters

`bisect.bisect`(a, x, lo=0, hi=len(a))

Similar to `bisect_left()`, but returns an insertion point which comes after (to the right of) any existing entries of x in a.

The returned insertion point i partitions the array a into two halves so that `all(val <= x for valin a[lo:i])` for the left side and `all(val > x for val in a[i:hi])` for the right side.

This algorithm comes in at 100% percentile runtime

Time Complexity: O(logN), because it uses a basic bisection

Space Complexity: O(1)