问题是:
给定一个String列表,在列表中找到一个特定的字符串并返回 它的索引在按顺序排序的String的有序列表中。有 两种情况:
字符串在列表中,在有序列表中返回它应该包含的索引。
- 醇>
String不在列表中,在有序列表中返回它应该包含的索引。
这是我的代码,我假设已经订购了给定的列表。
对于第二种情况,如何使用mergesort查找假设的索引?我会很感激一些线索。
我正在考虑先获取原始列表的副本,对其进行排序,然后在副本列表中获取字符串的索引。在这里我卡住了...我是否再次使用mergesort来获取副本列表中不存在的字符串的索引?
public static int BSearch(List<String> s, String a) {
int size = s.size();
int half = size / 2;
int index = 0;
// base case?
if (half == 0) {
if (s.get(half) == a) {
return index;
} else {
return index + 1;
}
}
// with String a
if (s.contains(a)) {
// on the right
if (s.indexOf(s) > half) {
List<String> rightHalf = s.subList(half + 1, size);
index += half;
return BSearch(rightHalf, a);
} else {
// one the left
List<String> leftHalf = s.subList(0, half - 1);
index += half;
return BSearch(leftHalf, a);
}
}
return index;
}
运行此代码时,索引不会更新。我想知道这里有什么问题。当我测试代码时,即使列表中包含字符串,我也只会得到0
或1
。
答案 0 :(得分:2)
您的代码仅返回0
或1
,因为您没有跟踪每个递归调用的索引,而不是每次都重置为0
。另外,要查找不存在的元素的位置,请考虑列表{0,2,3,5,6}
。如果我们在这里运行二进制搜索以查找4
,它应该停在元素5
所在的索引处。希望这足以让你开始!