# 力扣744：寻找比目标字母大的最小字母； LeetCode744:Find Smallest Letter Greater Than Target

## 思路及题解

### 手写二分

#### 源码：

class Solution:
def nextGreatestLetter(self, letters: List[str], target: str) -> str:
if letters[0] > target or letters[-1] <= target:
return letters[0]
start = 1
end = len(letters)-1
while start < end:
mid = (start + end) // 2
if letters[mid] > target:
end = mid
else:
start = mid + 1
return letters[start]


40 ms, 16.9 MB

#### 解析

1. 列表首位元素满足要求，返回该元素，程序结束。
2. 列表末位元素也不满足要求，返回首位元素，程序结束。
然后开始二分查找。

### 使用python内置函数

#### 源码

class Solution:
def nextGreatestLetter(self, letters: List[str], target: str) -> str:
r = bisect_right(letters, target)
if r == len(letters):
r = 0
return letters[r]


44 ms, 16.9 MB

#### 解析

python 内置了二分算法操作的模块bisect，如果不想手写的话，也可以使用内置函数。

def bisect_right(a, x, lo=0, hi=None):
"""Return the index where to insert item x in list a, assuming a is sorted.

The return value i is such that all e in a[:i] have e <= x, and all e in
a[i:] have e > x.  So if x already appears in the list, a.insert(x) will
insert just after the rightmost x already there.

Optional args lo (default 0) and hi (default len(a)) bound the
slice of a to be searched.
"""

if lo < 0:
raise ValueError('lo must be non-negative')
if hi is None:
hi = len(a)
while lo < hi:
mid = (lo+hi)//2
# Use __lt__ to match the logic in list.sort() and in heapq
if x < a[mid]: hi = mid
else: lo = mid+1
return lo


## 题目

### 英文版

#### 744. Find Smallest Letter Greater Than Target

Given a characters array letters that is sorted in non-decreasing order and a character target, return the smallest character in the array that is larger than target.

Note that the letters wrap around.

• For example, if target == 'z' and letters == ['a', 'b'], the answer is 'a'.

Example 1:

Input: letters = ["c","f","j"], target = "a"
Output: "c"


Example 2:

Input: letters = ["c","f","j"], target = "c"
Output: "f"


Example 3:

Input: letters = ["c","f","j"], target = "d"
Output: "f"


Constraints:

• 2 <= letters.length <= 104
• letters[i] is a lowercase English letter.
• letters is sorted in non-decreasing order.
• letters contains at least two different characters.
• target is a lowercase English letter.

### 中文版

#### 744. 寻找比目标字母大的最小字母

• 如果目标字母 target = 'z' 并且字符列表为 letters = ['a', 'b']，则答案返回 'a'

输入: letters = ["c", "f", "j"]，target = "a"



输入: letters = ["c","f","j"], target = "c"



输入: letters = ["c","f","j"], target = "d"



• 2 <= letters.length <= 104
• letters[i] 是一个小写字母
• letters 按非递减顺序排序
• letters 最少包含两个不同的字母
• target 是一个小写字母
posted @ 2022-04-03 10:06  楠少科技  阅读(18)  评论(0编辑  收藏  举报