问题描述:在一个由小写字母构成的已排好序的数组中找出比目标字符大的最小字符,注意,这个数组可以是环形的。
思路:由于数组是环形的且已排好序,所以如果目标值》=数组最后一个字符。直接返回第一个字符即可。否则遍历数组找出最小值。
原答案:
public char nextGreatestLetter(char[] letters, char target) {
if(target>=letters[letters.length-1])
return letters[0];
int min=25;
char res=letters[0];
for(char c:letters){
if(c-target>0&&min>c-target){
min=c-target;
res=c;
}
}
return res;
}
最佳答案:
public char nextGreatestLetter(char[] letters, char target) {
if(target>=letters[letters.length-1])
return letters[0];
int start =0;
int end=letters.length;
while(start<end){
int mid=(start+end)/2;
if(letters[mid]>target)
end=mid;
else
start=mid+1;
}
if(letters[start]==target)
return letters[start+1];
else
return letters[start];
}
查找时可以通过二分法查找从而达到更快的速度。