Java:
class Solution {
public char nextGreatestLetter(char[] letters, char target) {
int left = 0, right = letters.length - 1;
while (left < right) {
int middle = left + (right - left) / 2;
if (letters[middle] <= target) {
left = middle + 1;
}
else {
right = middle;
}
}
return (left == letters.length - 1) && (letters[left] <= target) ? letters[0] : letters[left];
}
}
C++:
class Solution {
public:
char nextGreatestLetter(vector<char>& letters, char target) {
if (letters.empty()) return '-1';
int left = 0, right = letters.size() - 1;
while (left < right) {
int middle = (left + right) >> 1;
if (letters[middle] <= target) {
left = middle + 1;
}
else {
right = middle;
}
}
if (letters[left] <= target) return letters[0];//特别注意最后的结果如果还是比target小,应该输出第一个元素,因为是循环出现的;
return letters[left];
}
};