二分查找
解题思路:时间复杂度O(
l
o
g
2
n
log_2n
log2n),空间复杂度O(
1
1
1) |
---|
- 二分查找,如果当前mid字符<=target,则left = mid+1,也就是去mid右边找,因为我们要找一个比target大的字符
- 当我们mid>target,则right = mid。也就是去mid左边找,试图找一个更小的符合条件的。因为我们要找一个字符,不光比target大,还要是所有比target大的字符中最小的
class Solution {
public char nextGreatestLetter(char[] letters, char target) {
int n = letters.length;
int left = 0,right = n-1;
if(target >= letters[right]) return letters[0];
int mid = 0;
while(left<right){
mid = left + (right - left)/2;
if(letters[mid]<=target) left = mid+1;
else right = mid;
}
return letters[left];
}
}