当前位置:   article > 正文

一些数据结构使用记录_priorityqueue pq = new priorityqueue<>((pai

priorityqueue pq = new priorityqueue<>((pair1,pair2)->pair1[1]-pair2[

优先队列

创建:

        PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>(){
            public int compare(int[] pair1, int[] pair2){
                return pair1[0] != pair2[0] ? pair2[0] - pair1[0] : pair2[1] - pair1[1];
            }
        });
  • 1
  • 2
  • 3
  • 4
  • 5

遍历存放数组的值和下标(可以指定数量):

        for(int i = 0; i < k; i++){
            pq.offer(new int[]{nums[i],i});
        }
  • 1
  • 2
  • 3
  • 使用
    队列是遵循先进先出(First-In-First-Out)模式的,但有时需要在队列中基于优先级处理对象。

  • 原理
    Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示(任意一个非叶子节点的权值,都不大于其左右子节点的权值)

  • 方法
    add()和offer(),插入失败时前者会抛出异常,后者会返回false
    element()和peek(),返回队顶元素,前者抛异常,后者返回null
    remove()和poll(),删除队首元素,前者抛异常,后者返回null
    remove(Object o),删除队列中跟o相等的某一个元素(如果有多个相等,只删除一个),该方法不是Queue接口内的方法,而是Collection接口的方法。

  • 例题
    https://leetcode-cn.com/problems/sliding-window-maximum/

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int n = nums.length;
        PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>(){
            public int compare(int[] pair1, int[] pair2){
                return pair1[0] != pair2[0] ? pair2[0] - pair1[0] : pair2[1] - pair1[1];
            }
        });
        for(int i = 0; i < k; i++){
            pq.offer(new int[]{nums[i],i});
        }
        int[] ans = new int[n-k+1];
        ans[0] = pq.peek()[0];
        for(int i = k; i < n; i++){
            pq.offer(new int[]{nums[i],i});
            while(pq.peek()[1] <= i - k){
                pq.poll();
            }
            ans[i-k+1] = pq.peek()[0];
        }
        return ans;     
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

前k个最小数


  • 1

把数字加到字符串数组里

 List<String> ans = new ArrayList<>();
   for(int i = 1;i <= n; i++){
   		String cur = "";
   		cur = i + "";
        ans.add(cur);
   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号