我正在尝试将多个排序列表合并到一个 TreeSet 中。然后我正在考虑在该 TreeSet 上应用二分搜索算法以 O(log n) 时间复杂度检索元素。
下面是我的代码,其中我在我的方法之一中传递列表列表并将它们组合成TreeSet
避免重复...里面的所有列表inputs
已排序 -
private TreeSet<Integer> tree = new TreeSet<Integer>();
public void mergeMultipleLists(final List<List<Integer>> inputs) {
tree = new TreeSet<Integer>();
for (List<Integer> input : inputs) {
for(Integer ii : input) {
tree.add(ii);
}
}
}
public List<Integer> getItem(final Integer x) {
// extract elements from TreeSet in O(log n)
}
- 首先,这是将多个排序列表合并到 TreeSet 中的正确方法吗?有没有直接的方法可以有效地合并 TreeSet 中的多个排序列表?
- 其次,我如何以 O(log n) 的时间复杂度从 TreeSet 中提取元素?我想找一个元素
x
在那里面TreeSet
,如果存在,则返回它,如果不存在,则返回下一个最大值TreeSet
.
或者与我目前使用的数据结构相比,我可能更好地使用另一种数据结构?
更新的代码:-
私有 TreeSet 树 = new TreeSet();
public SearchItem(final List<List<Integer>> inputs) {
tree = new TreeSet<Integer>();
for (List<Integer> input : inputs) {
tree.addAll(input);
}
}
public Integer getItem(final Integer x) {
if(tree.contains(x)) {
return x;
} else {
// now how do I extract next largest
// element from it if x is not present
}
}
TreeSet
由一个支持NavigableMap
, a TreeMap
具体来说。呼唤contains()
on a TreeSet
代表TreeMap.containsKey()
,这是一个二分搜索实现。
您可以使用以下命令检查对象是否包含在集合中TreeSet.contains()
,但你必须先拥有对象。如果您希望能够查找和检索对象,那么Map
实施效果会更好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)