【发布时间】:2017-03-27 13:29:58
【问题描述】:
我正在尝试从 Java LinkedList 中删除一个最小元素。
为了找到最小值,我必须遍历一次 LinkedList。我想保存该元素的节点或迭代器以在 O(1) 中将其删除。
正常
list.remove(Object o)
需要 O(n) 步。
void removeMin(LinkedList<Integer> list) {
ListIterator<Integer> itList = list.listIterator();
Integer min = itList.next();
while(itList.hasNext()) {
Integer curVal = itList.next();
if(curVal < min) {
min = curVal
// Copy the iterator here?
}
}
// remove min from list here.
}
有没有办法在找到新的最小值时复制迭代器,以便之后调用迭代器的 remove()?
【问题讨论】:
-
备注:你必须在你的List中使用'Integer',而不是原始类型'int'
-
你说得对,我改变了我的示例代码......仍然存在问题,但我从 glee8e 的评论链接中读到的内容,似乎不可能-.-
-
你为什么要这样做?您希望提高性能吗?
-
如您所说,您必须至少遍历您的列表一次。那已经是
O(n)。如果你遍历它两次(第一次找到最小元素,第二次删除它)整体复杂度仍然是O(n)。
标签: java data-structures