算法競賽中的常用JAVA API:PriorityQueue(優先隊列)

瞭解其他JAVA 常用API和算法點這裏 >> https://blog.csdn.net/GD_ONE/article/details/104061907

PriorityQueue

翻譯過來就是優先隊列,本質是一個堆, 默認情況下堆頂每次都保留最小值,每插入一個元素,仍動態維護堆頂爲最小值。

初始化

PriorityQueue()//使用默認的初始容量(11)創建一個 PriorityQueue,並根據其自然順序對元素進行排序。

PriorityQueue<Integer> Q = new PriorityQueue<>(); // 初始化

常用函數

add(E e)//將指定的元素插入此優先級隊列。
clear()//清空
contains(Object o) // 如果包含指定元素返回true
iterator()//返回在此隊列中的元素上進行迭代的迭代器。
offer(E e) // 將指定元素插入此優先隊列
peek() // 獲取第一個元素,及最小或最大元素
poll() // 獲取並移除第一個
remove(Object o) // 移除指定元素
size() // 返回元素個數

實現大根堆的兩種方式

因爲java中的優先隊列默認是小根堆,要實現大根堆可以用以下兩種方法:

  1. 使用自定義比較器
  2. 將所有數據變爲之前自身的負數之後在插入, 因爲添加個負號就相當於是逆序了嘛。1 < 2 < 3 取負之後變爲 -1 > - 2 > - 3

實例

public static void main(String[] args){
		Scanner in = new Scanner(new InputStreamReader(System.in));
		PriorityQueue<Integer> Q = new PriorityQueue<>();
		int a;
		for(int i = 0; i < 10; i++){
			a = in.nextInt();
			Q.add(a);
			System.out.print(Q.peek()+" ");// 輸出當前隊列的最小元素
		}
	}

輸入: 1 -1 -2 -3 10 -4 -5 -6 -7 -8
輸出: 1 -1 -2 -3 -3 -4 -5 -6 -7 -8
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章