static int f (String[] a,String p) {
int begin = 0;
int end = a.length - 1;
while(begin <= end) {
int mid = begin + ((end - begin)>>1);
while(a[mid].equals("")) {
mid++;
if(mid > end) {//说明 从中间到最后一个字符都为空字符串
//所以重新计算end和midIndexof
//end值就应该比原先的midIndexof值-1
//midIndexof重新计算
end = (begin + ((end - begin)>>1)) - 1;
mid = begin + ((end - begin)>>1);
}
}
//这里必须给 -1 或者 +1 否则可能会形成死循环。
if(a[mid].compareTo(p) > 0){
end = mid -1;
} else if(a[mid].compareTo(p) < 0){
begin = mid + 1;
} else {
return mid;
}
}
return -1;
}
public static void main(String[] args) {
String[] strings = {"a","","ab","","","b","d"};
String[] arr = {"a", "", "ac", "", "ad", "b", "", "ba"};
String[] a = {"a","","","","b"};
String[] arr1 = {"a","","","","c"};
System.out.println(f(arr, "c"));
}
【二分查找】有空字符串的有序字符串数组查找字符串
猜你喜欢
转载自blog.csdn.net/alovelypeach/article/details/104153241
今日推荐
周排行