【发布时间】:2015-05-17 10:09:07
【问题描述】:
我试图为算法和数据结构类进行自动完成分配,在分配中它要求您创建一个类来查找键的第一次出现和键的最后一次出现。
我遇到的问题是我不明白如何在这个问题中实现比较器,我在设置二进制搜索时遇到问题,因为当我尝试比较键
// 返回 a[] 中与搜索键相等的第一个键的索引,如果没有这样的键,则返回 -1。使用二分查找
public static <Key>int firstIndexOf(Key[] a, Key key, Comparator<Key> comparator) {
int low = 0;
int high = a.length - 1;
int result = -1;
while (low <= high) {
int mid = (low + high) / 2;
if (key == a[mid]) {
result = mid;
high = mid - 1;
}else if (key < a[mid]) { //**<--- throws bad operand type for binary operator**
high = mid - 1; // key is probable to lie before mid element
}else {
low = mid +1; // key is probable to lie after mid
}
}
return result;
}
我应该传递的有问题的比较器就像这样,它使用字符串中的子字符串方法查找 rValue,以查看两个对象之间的前缀顺序是否匹配。再说一次,我不知道我是否一开始就这样做了,但这不是问题,问题是我将如何在其他类中实现这一点
// 按字典顺序比较术语,但只使用每个查询的前 r 个字符。
public static class prefixOrder implements Comparator<Term>
{ public prefixOrder(int r){
rValue = r;
}
@Override
public int compare(Term v, Term w){
return v.queryItem.substring(rValue).compareTo(w.queryItem.substring(rValue));
}
}
作业链接 https://www.cs.princeton.edu/courses/archive/fall14/cos226/assignments/autocomplete.html
【问题讨论】:
标签: java comparator binary-search