题目描述:
标签:数组 二分查找
给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。
在比较时,字母是依序循环出现的。举个例子:
如果目标字母 target = 'z' 并且字符列表为 letters = ['a', 'b'],则答案返回 'a'
代码:
思路分析:
还是二分查找,但主要是找到那个可以插入元素的下标值,所以要注意循环不变量的使用,同时如果是要最后一个元素后面插入元素,则应该返回letters[0]。
class Solution {
public char nextGreatestLetter(char[] letters, char target) {
int left = 0;
int right = letters.length - 1;
while(left <= right){
int mid = left + (right - left) / 2;
if(letters[mid] <= target){
left = mid + 1;
}else{
right = mid - 1;
}
}
return left < letters.length ? letters[left] : letters[0];
}
}