0
点赞
收藏
分享

微信扫一扫

算法4-1.1.29等值键


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

代码

public class Main {
public static int rank(int[] a, int t, int lo, int hi, int depth){

while (lo <= hi){
int mid = lo + (hi-lo)/2;
if (a[mid] < t){
lo = mid+1;
}else if (a[mid]>t){
hi = mid-1;
}else{
return mid;
}
depth++;

}
return -1;
}
public static int count(int[] a, int key){
int pos = rank(a,key);
int localPos = pos;
while (pos<a.length-1 && a[pos]==key){
pos++;
}
return pos-localPos;
}
public static int rank(int[] a, int key){
int lo = 0, hi = a.length, mid;
while (lo < hi){
mid = lo+(hi-lo)/2;
if (a[mid] < key) mid = rank(a, key, mid+1, hi, 0);
else if (a[mid] > key) mid = rank(a, key, lo, mid-1,0);

while (mid >= 0 && a[mid] == key){
mid --;
}
return mid+1;
// for (int i = mid; i >= 0; i --){
// if (a[i] < key) return i+1;
// }
}

return -1;

}
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4, 4, 4, 4, 7, 7, 8,8, 9, 12 };
Arrays.sort(a);
System.out.println(rank(a, 7));
System.out.println(count(a, 7));
}
}

答案

7
2


举报

相关推荐

0 条评论