算法(第4版本)1.1.29

等值键

为BinarySearch类添加一个静态方法rank(),它接受一个键和一个整型有序数组(可能存在重复键)作为参数并返回数组中小于该键的元素数量,以及一个类似的方法count()来返回数组中等于该键的元素的数量。注意:如果i和j分别是rank(key,a)和count(key,a)的返回值,那么a[i..i+j-1]就是数组中所有和可以相等的元素。

(我怎么看它后面的注意,应该count方法是返回“大于该键的元素数量”呢)


private static void test29(){
      int key = 2;
      int[] a = {0, 1, 1, 1, 2, 3, 4, 5, 6, 7};
      int result1 = rank2(key, a);
      System.out.println("result1 = " + result1);
}
  
  //最大的,小于key的数的index+1
  private static int rank2(int key, int[] a){
      int count = 0;
      int lo = 0;
      int hi = a.length - 1;
      while(lo <= hi){
          int mid = lo + (hi - lo) / 2;
          System.out.println("a[" + mid + "] = " + a[mid]);
          if(key <= a[mid]){ 
              hi = mid - 1;
          } else if(key > a[mid]){
              count = mid + 1;
              lo = mid + 1;
          }
          System.out.println("lo = " + lo + ", hi = " + hi);
      }
      
      return count;
}


你可能感兴趣的:(算法第4版学习笔记)