题目链接:https://leetcode.com/problems/find-smallest-letter-greater-than-target/description/
这题就是在已排好序的字符数组中找出比指定字母大的而且最近的字母。如果指定字母大于等于数组中最后一个字母,则输出第一个。
1.如果target < letters[mid],那么向左压缩区间
2.剩下两种情况则向右压缩区间
但是这里面还存在一种可能,就是ans = lettersSize - 1且 letters[ans] <= target.
就是前面说的指定字母大于等于数组中最后一个字母,那么让ans = 0就好了。
3.如果遍历完都找不到答案,那么说明指定字母比第一个字母都还要小。
char nextGreatestLetter(char* letters, int lettersSize, char target) {
int l = 0,r = lettersSize - 1;
int ans = -1;
while(l < r){
int mid = l + (r - l) / 2;
if(target < letters[mid]){
r = mid;
}else{
l = mid + 1;
ans = l;
if(ans == (lettersSize - 1) && letters[ans] <= target){
ans = 0;
}
}
}
if(ans == -1){
ans = 0;
}
return letters[ans];
}