给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母。
数组里字母的顺序是循环的。举个例子,如果目标字母target = ‘z’ 并且有序数组为 letters = [‘a’, ‘b’],则答案返回 ‘a’。
注:
letters长度范围在[2, 10000]区间内。
letters 仅由小写字母组成,最少包含两个不同的字母。
目标字母target 是一个小写字母。
思路:利用二分查找法做。
利用二分查找模板二的解法做
mid值 小于等于 target的时候 向右区域继续查找,
大于时候向左区域进行查找。
在left索引值 == 数组长度的时候,代表没有找到比它大的字母,因为题目为循环,所以可以直接返回letters[0]
寻找目标值左侧的值,利用二分查找法模板二。
class Solution {
public char nextGreatestLetter(char[] letters, char target) {
int left = 0;
int right = letters.length;
while(left < right){
int mid = left + (right - left) / 2;
if(letters[mid] <= target){
left = mid + 1;
}else{
right = mid;
}
}
if(left == letters.length ){
return letters[0];
}else{
return letters[left];
}
}
}