您的位置:首页 > 其它

LeetCode 744 Find Smallest Letter Greater Than Target

2018-01-24 19:07 441 查看
扫描

public char nextGreatestLetter(char[] letters, char target) {
//1.大于等于所有字母先处理
if(target>=letters[letters.length-1])
return letters[0];
for(int i=0;i<letters.length;i++){
if(letters[i]>target)
return letters[i];
}
return '\0';
}


二分查找法

/*
1.大于等于所有字母先处理

2.没有这个字符left就是答案,target一定介于letters[0]-letters[length-1]之间
letters中如果没有target 由于left最后会大于right   target夹在right和left之间left就是答案
否则
对target左侧进行二分(和target相等作为二分的条件)相等右半段 不等左半端
最后一定是left在不等的位置并且离target最近
*/
public char nextGreatestLetter(char[] letters, char target) {

if(target>=letters[letters.length-1])
return letters[0];
int length = letters.length;
int left = 0;
int right = length - 1;
int mid = ( left + right ) >> 1;
while(left<=right) {
//          System.out.println("i");
if(letters[mid]==target) {
//              System.out.println("J");
int left2 = mid+1;
int right2 = length-1;
int mid2 = ( left2 + right2 ) >> 1;
while(left2<=right2) {
if(target==letters[mid2]) {
left2 = mid2 + 1;
mid2 = ( left2 + right2 ) >> 1;
}else {
right2 = mid2 - 1;
mid2 = ( left2 + right2 ) >> 1;
}
}
return letters[left2];
}else if(letters[mid]<target) {
//              System.out.println("k");
left = mid + 1;
mid = ( left + right ) >> 1;
}else {
//              System.out.println("g");
right = mid - 1;
mid = ( left + right ) >> 1;
}
}
return letters[left];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: