1. 程式人生 > 其它 >在有空字串的有序字串陣列中查詢《演算法很美》

在有空字串的有序字串陣列中查詢《演算法很美》

技術標籤:演算法很美字串演算法

在有空字串的有序字串陣列中查詢

有個排序後的字串陣列,其中散步著一些空字串,編寫一個方法,找出給定字串(肯定不是空字串)的索引。


思路:就和我們的二分查詢法是一樣的。

  1. while (begin <= end)給定條件
  2. int indexOfHid = begin + ((end - begin) >> 1);取中間下標
  3. while(arr[indexOfHid].equals("")) indexOfHid++; 防止indexOfHid下標取得的是空字串,如果是則++,直到不是空字串
  4. if(indexOfHid>end)
    return -1;防止後面全是空字串
  5. if(arr[indexOfHid].compareTo(p)>0) 判斷p的值如果小於中間值,則end=indexOfHid-1;移動end下標到中間
  6. 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; } }

知識點:

  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));            
     }
     結果:10-1
}