public char nextGreatestLetter(char[] letters, char tar) {
int n=letters.length;
if(tar>=letters[n-1])//tar>=最后一个时返回第一个
return letters[0];
int l=0;
int r=n-1;
//二分查找
while(l<r){
int mid=(l+r)/2;
if(letters[mid]>tar){
r=mid-1;
}else if(letters[mid]<tar){
l=mid+1;
}else {
l=r=mid;
}
}
if(letters[l]==tar){//找到tar后继续向后寻找第一个不等于tar的
for(int i=l+1;i<l+1+n;i++){
if(letters[i%n]!=tar){
l=i;
break;
}
}
return letters[l%n];
}else if(letters[l]>tar){
return letters[l];
}else{
return letters[l+1];
}
}
2022.4.3-----leetcode.744
最新推荐文章于 2022-04-05 08:59:43 发布