解题思路:
首先注意一下限定条件,就是如果序列中最大的字母也不比目标字母大,就返回第一个位置的字母,然后就开始我们的二分法,这次二分法找的是比目标target大的字符,那么如果mid位置小于等于target,left = mid + 1,大于target,right 直接等于 mid,因为说不定此时的 mid 刚好比目标大一点点呢!代码如下:
class Solution {
public:
char nextGreatestLetter(vector<char>& letters, char target) {
int left = 0, right = letters.size() - 1;
if(letters[right] <= target) {
return letters[left];
}
while(left < right) {
int mid = (left + right) / 2;
if(letters[mid] <= target) left = mid + 1;
else right = mid;
}
return letters[right];
}
};
/*作者:heroding
链接:https://leetcode-cn.com/problems/find-smallest-letter-greater-than-target/solution/cer-fen-fa-by-heroding-trks/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/