看到题目想到了二分查找的运行时间为O(logn)
class Solution:
def nextGreatestLetter(self, letters: List[str], target: str) -> str:
left = 0
right = len(letters) - 1
while left <= right:
mid = left + (right-left) // 2
if letters[mid] <= target:
left = mid + 1
else:
right = mid - 1
# 如果target不在letters范围内,则返回letters[0](字母是循环的)
return letters[left] if left < len(letters) else letters[0]
循环条件是用来跳出循环的。
如果left = right
则mid = left = right
如果此时 letters[mid]仍小于或等于target,则一定是取比索引为mid更大的值,即取索引为mid+1的值,因为列表是顺序排列的。大于同理。