堆(优先级队列 PriorityQueue)

简介: 堆(优先级队列 PriorityQueue)

堆(优先级队列 PriorityQueue)

通过题目讲解

题目链接博客:合并果子(优先级队列)

提交代码

import java.io.*;
import java.util.*;
public class Main
{ 
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    PriorityQueue<Integer> q = new PriorityQueue<Integer>();
    int n = in.nextInt();
    for (int i = 0; i < n; ++ i)
    {
      q.add(in.nextInt());
    }
    int sum = 0;
    while(q.size()>1)
    {
      int a = q.poll();
      int b = q.poll();
      sum += a + b;
      q.add(a + b);
    }
    System.out.println(sum);
  }
}

常用方法

和Queue一样

参考文档:队列(Queue)

遍历方式

public static void main(String[] args) {
    PriorityQueue<Integer> pqueue = new PriorityQueue<Integer>();     
    pqueue.add(100);
    pqueue.add(10);
    pqueue.add(11);
    pqueue.add(1);
    pqueue.add(646);
    System.out.println(pqueue);
    /*[1, 10, 11, 100, 646]*/
    for (Integer it : pqueue)
    {
      System.out.print(it + " ");
    }
    /*1 10 11 100 646 */
    System.out.println();
    Iterator<Integer> it = pqueue.iterator();
    while(it.hasNext())
    {
      System.out.print(it.next() + " ");
    }
    /*1 10 11 100 646 */
  }

排序

public static void main(String[] args) {
    // 默认排序规则是升序排列
    // 可以自定义排序规则
    PriorityQueue<Integer> pqueue = new PriorityQueue<Integer>(new Comparator<Integer>() {
      @Override
      public int compare(Integer o1, Integer o2) {
        int num = 0;
        if (o1 > o2) num = -1;
        else num = 1;
        return num;
      }
    });     
    pqueue.add(100);
    pqueue.add(10);
    pqueue.add(11);
    pqueue.add(1);
    pqueue.add(646);
    System.out.println(pqueue);
    /*[646, 100, 11, 1, 10]*/
  }
相关文章
|
Java 调度
【PriorityQueue优先级队列及其应用】
【PriorityQueue优先级队列及其应用】
|
6月前
|
存储 Java
优先级队列(堆)
优先级队列(堆)
45 3
|
3月前
|
存储 设计模式 算法
【C++】deque以及优先级队列
【C++】deque以及优先级队列
|
6月前
|
设计模式 算法 调度
【C++】开始使用优先队列
优先队列的使用非常灵活,它适合于任何需要动态调整元素优先级和快速访问最高(或最低)优先级元素的场景。在使用时,需要注意其插入和删除操作的时间复杂度,以及如何根据实际需求选择合适的仿函数。
54 4
|
6月前
|
存储 安全
堆与优先级队列
堆与优先级队列
37 0
|
6月前
|
存储 算法 安全
堆 和 优先级队列(超详细讲解,就怕你学不会)
堆 和 优先级队列(超详细讲解,就怕你学不会)
|
6月前
|
存储 安全 Java
优先级队列
优先级队列
|
存储 算法
优先级队列(堆)&&  堆排序
优先级队列(堆)&&  堆排序
48 0
|
存储 Java
PriorityQueue优先级队列
PriorityQueue优先级队列
|
存储
优先级队列详解
优先级队列详解
112 0