赞
踩
java 优先队列默认是小顶堆,小的先出队。
PriorityQueue<Integer> pq = new PriorityQueue<>();
改成大的先出队:
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b)->(b-a));
按照其他规则出队:
//将pair按照key从大到小排序,key相同情况下,按照value从小到大排序。 PriorityQueue<Pair<Integer, Integer>> pq = new PriorityQueue<>(n, new Comparator<Pair<Integer, Integer>>() { public int compare(Pair<Integer, Integer> o1, Pair<Integer, Integer> o2) { if(o1.getKey() - o2.getKey() < 0) { return 1; } else if(o1.getKey() - o2.getKey() == 0){ if(o1.getValue() - o2.getValue() < 0) { return -1; } else { return 1; } } return -1; } }); // 在数组情况下,pair的key为数组值,value为下标, // 实现上述排序的一种巧妙做法。注:nums[] 为数组 PriorityQueue<Integer> pqMin = new PriorityQueue<>(new Comparator<Integer>() { public int compare(Integer o1, Integer o2) { if(nums[o1] - nums[o2] < 0) { return -1; } else if(nums[o1] - nums[o2] == 0){ if(o1 - o2 < 0) { return -1; } } return 1; } }); PriorityQueue<Integer> pqMax = new PriorityQueue<>(new Comparator<Integer>() { public int compare(Integer o1, Integer o2) { if(nums[o1] - nums[o2] > 0) { return -1; } else if(nums[o1] - nums[o2] == 0){ if(o1 - o2 > 0) { return -1; } } return 1; } });
public boolean add(E e); //在队尾插入元素,插入失败时抛出异常,并调整堆结构
public boolean offer(E e); //在队尾插入元素,插入失败时抛出false,并调整堆结构
public E remove(); //获取队头元素并删除,并返回,失败时前者抛出异常,再调整堆结构
public E poll(); //获取队头元素并删除,并返回,失败时前者抛出null,再调整堆结构
public E element(); //返回队头元素(不删除),失败时前者抛出异常
public E peek();//返回队头元素(不删除),失败时前者抛出null
public boolean isEmpty(); //判断队列是否为空
public int size(); //获取队列中元素个数
public void clear(); //清空队列
public boolean contains(Object o); //判断队列中是否包含指定元素(从队头到队尾遍历)
public Iterator<E> iterator(); //迭代器
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。