Pattern
Pattern
Pattern
Cut the search space in half when the answer is ordered or monotonic.
Keep an invariant for what the search interval still may contain.
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
print(mid)
break
if nums[mid] < target:
left = mid + 1
else:
right = mid - 1
else:
print(-1)