当前位置: 代码迷 >> 综合 >> Java——PriorityQueue(优先队列)——小根堆和大根堆思想
  详细解决方案

Java——PriorityQueue(优先队列)——小根堆和大根堆思想

热度:88   发布时间:2023-11-22 08:42:10.0

Java的优先队列默认是小根堆

import java.util.PriorityQueue;
public class Zz {
      public static void main(String[] args) throws Exception{
    PriorityQueue<Integer>a=new PriorityQueue<>();int x;Scanner cin=new Scanner (System.in);for(int i=1;i<=10;i++){
    x=cin.nextInt();a.add(x);System.out.print(a.peek()+" ");//小根堆思想,每次输出一个堆中最小的数}   	}
/*1 -1 -2 -3 10 -4 -5 -6 -7 -8 1 -1 -2 -3 -3 -4 -5 -6 -7 -8 */}

下面是Java优先队列大根堆的使用:
(1)用Collections接口 <推荐>

import java.util.Collections;import java.util.PriorityQueue;
public class Zz {
      public static void main(String[] args) throws Exception{
    //PriorityQueue<Integer>a=new PriorityQueue<>();PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());int x;Scanner cin=new Scanner (System.in);for(int i=1;i<=10;i++){
    x=cin.nextInt();queue.add(x);System.out.print(queue.peek()+" ");//大根堆思想,每次输出一个堆中最大的数}  }
/*1 -1 -2 -3 10 -4 -5 -6 -7 -8 1 1 1 1 10 10 10 10 10 10 */}

(2)自定义sort

PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
    public int compare(Integer o1, Integer o2) {
    return o2-o1;}});

倒序输出大根堆:

public class Zz {
      public static void main(String[] args) throws Exception{
    //PriorityQueue<Integer>a=new PriorityQueue<>();PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
    public int compare(Integer o1, Integer o2) {
    return o2-o1;}});queue.offer(20);queue.offer(10);queue.offer(15);while(!queue.isEmpty()){
    int t=queue.poll();System.out.println(t);}}
}
/*20 15 10 `
  相关解决方案