文章目录
- 1. 题目链接
- 2. 题目大意
- 3. 示例
- 4. 解题思路
- 5. 参考代码
1. 题目链接
744. 寻找比目标字母大的最小字母 - 力扣(LeetCode)
2. 题目大意
描述:给你一个字符数组 letters,该数组按非递减顺序排序,以及一个字符 target。letters 里至少有两个不同的字符。
要求:找出 letters 中大于 target 的最小的字符。如果不存在这样的字符,则返回 letters的第一个字符。
说明:
- 2≤letters.length≤104。
- letters[i] 是一个小写字母。
- letters 按非递减顺序排序。
- letters 最少包含两个不同的字母。
- target是一个小写字母。
3. 示例
输入: letters = ["c", "f", "j"],target = "a"
输出: "c"
解释:letters 中字典上比 'a' 大的最小字符是 'c'。
输入: letters = ["c","f","j"], target = "c"
输出: "f"
解释:letters 中字典顺序上大于 'c' 的最小字符是 'f'。
4. 解题思路
利用二分查找,找到比 target 大的字母。注意 target 可能大于 letters 的所有字符,此时应返回 letters 的第一个字母。
我们可以假定 target 的取值范围为 [0,len(letters)]。当 target 取到 len(letters) 时,说明 target 大于 letters 的所有字符,对
len(letters) 取余即可得到 letters[0]。
5. 参考代码
class Solution {public char nextGreatestLetter(char[] letters, char target) {int n = letters.length;int left = 0;int right = n - 1; // 使用闭区间 [left, right]while (left <= right) {int mid = left + (right - left) / 2;if (letters[mid] <= target) {left = mid + 1;} else {right = mid - 1;}}return letters[left % n];}
}