Ahm*_*mdy 69
对于 Java 8,更新现有答案:
您可以将 Java 优先级队列用作堆。
最小堆: --> 使最小元素始终位于顶部,以便您可以在 O(1) 中访问它。
PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();
Run Code Online (Sandbox Code Playgroud)
Max Heap: --> 保持最大元素始终在顶部,顺序与上面相同。
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Comparator.reverseOrder());
Run Code Online (Sandbox Code Playgroud)
这与其他答案中的建议相同(Integer o1, Integer o2) -> Integer.compare(o2, o1)或- Integer.compare(o1, o2)建议。
您可以使用:
add--> 将元素添加到队列中。O(log n)
remove--> 获取和删除最小值/最大值。O(log n)
peek--> 获取,但不删除最小值/最大值。O(1)
Boa*_*oaz 12
在 Java PriorityQueue 中可以作为 Heap 使用。
最小堆
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
Run Code Online (Sandbox Code Playgroud)
最大堆:
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Comparator.reverseOrder());
Run Code Online (Sandbox Code Playgroud)
小智 10
最小堆:
PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();
Run Code Online (Sandbox Code Playgroud)
最大堆:
PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return - Integer.compare(o1,o2);
}
});
Run Code Online (Sandbox Code Playgroud)
小智 6
PriorityQueue使用堆.基于https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html上的oracle文档,它似乎可能是二进制堆的实现.我不认为有一个斐波纳契或配对堆的正式实现,但我很乐意看到两者中的任何一个可用.
| 归档时间: |
|
| 查看次数: |
71529 次 |
| 最近记录: |