Leetcode 744.寻找比目标字母大的最小字母
1 题目描述(Leetcode题目链接)
给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母。
数组里字母的顺序是循环的。举个例子,如果目标字母target = ‘z’ 并且有序数组为 letters = [‘a’, ‘b’],则答案返回 ‘a’。
输入:
letters = ["c", "f", "j"]
target = "a"
输出: "c"
输入:
letters = ["c", "f", "j"]
target = "c"
输出: "f"
输入:
letters = ["c", "f", "j"]
target = "d"
输出: "f"
输入:
letters = ["c", "f", "j"]
target = "g"
输出: "j"
输入:
letters = ["c", "f", "j"]
target = "j"
输出: "c"
输入:
letters = ["c", "f", "j"]
target = "k"
输出: "c"
注:
- letters长度范围在[2, 10000]区间内。
- letters 仅由小写字母组成,最少包含两个不同的字母。
- 目标字母target 是一个小写字母。
2 题解
二分法,需要注意的事情是如果定位到最后一个位置需要返回第一个元素。
class Solution:
def nextGreatestLetter(self, letters: List[str], target: str) -> str:
length = len(letters)
i, j = 0, length - 1
while i <= j:
mid = (i + j)//2
if letters[mid] > target:
j = mid - 1
else:
i = mid + 1
return letters[i%length]