题目
1.描述
给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。(想象成26个字母头尾相接组成一个环)
2.示例
输入:letters = ["c", "f", "j"]
, target = "a"
, 输出:"c"
输入:letters = ["c", "f", "j"]
, target = "c"
, 输出: "f"
3.思路
使用二分查找, 但此处不是找相等, 而是找比目标大且离目标最近的值.
4.代码
public char nextGreatestLetter(char[] letters, char target) {
int n = letters.length;
int low = 0, high = n - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (letters[mid] <= target)
low = mid + 1;
else
high = mid - 1;
}
return low < n ? letters[low] : letters[0];
}