在有空字串的有序字串陣列中查詢《演算法很美》
阿新 • • 發佈:2020-12-14
在有空字串的有序字串陣列中查詢
有個排序後的字串陣列,其中散步著一些空字串,編寫一個方法,找出給定字串(肯定不是空字串)的索引。
思路:就和我們的二分查詢法是一樣的。
while (begin <= end)
給定條件int indexOfHid = begin + ((end - begin) >> 1);
取中間下標while(arr[indexOfHid].equals(""))
indexOfHid++;
防止indexOfHid下標取得的是空字串,如果是則++,直到不是空字串if(indexOfHid>end)
return -1;
防止後面全是空字串if(arr[indexOfHid].compareTo(p)>0)
判斷p的值如果小於中間值,則end=indexOfHid-1;
移動end下標到中間else if(arr[indexOfHid].compareTo(p)<0)
判斷p的值如果大於中間值,則begin=indexOfHid+1;
移動begin到中間
public class 特殊有序陣列中查詢 {
public static void main(String[] args){
String[] arr = {"a", "" , "ac", "", "ad", "b", "", "ba"}; //是有空字串的有序的喔!!!
int res = indexOf(arr, "ba");
System.out.println(res);
}
private static int indexOf(String[] arr, String p){
int begin = 0;
int end = arr.length - 1;
while (begin <= end){
int indexOfHid = begin + ((end - begin) >> 1);
while(arr[indexOfHid].equals(""))
indexOfHid++;
if(indexOfHid>end)
return -1;
if(arr[indexOfHid].compareTo(p)>0){
end=indexOfHid-1;
}else if(arr[indexOfHid].compareTo(p)<0){
begin=indexOfHid+1;
}else{
return indexOfHid;
}
}
return -1;
}
}
知識點:
compareTo(p)
如果指定的數與引數相等返回0。
如果指定的數小於引數返回 -1。
如果指定的數大於引數返回 1。
public class Test{
public static void main(String args[]){
Integer x = 5;
System.out.println(x.compareTo(3));
System.out.println(x.compareTo(5));
System.out.println(x.compareTo(8));
}
結果:1、0、-1
}