• Java集合之PriorityQueue


    PriorityQueue

    • 定义
    C++:priority_queue 
    Java:PriorityQueue
    
    • 创建与其基本操作
    创建:
    PriorityQueue<Integer>=new PriorityQueue<>();
    基本操作:
    1	boolean isEmpty() 测试堆栈是否为空。
    2	Object peek( ) 查看堆栈顶部的对象,但不移除。
    3	Object poll( ) 移除堆栈顶部的对象,并返回该对象。
    4	Object offer(Object element)
    

    Java默认小根堆,如果想变大根堆有两种办法

    1. 类实现Comparable接口,实现compareTo方法
    2. 定义一个比较器类实现Comparator接口,实现compare方法

    例题:HIHOCODER 1105
    自己实现堆链接:http://www.cnblogs.com/zsyacm666666/p/7347440.html

    方法1:

    import java.util.*;
    import java.io.*;
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(new InputStreamReader(System.in));
    		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    		PriorityQueue<Integer>que=new PriorityQueue<Integer>((int)1e5+10,new Comparator<Integer>(){
    			@Override
    			public int compare(Integer a1,Integer a2) {
    				if(a1.equals(a2)) return 0;
    				return a1.compareTo(a2)>0?-1:1;
    			}
    		});
    		char op;
    		int n=sc.nextInt(),x;
    		while(n--!=0) {
    			op=sc.next().charAt(0);
    			if(op=='A') {
    			     x=sc.nextInt();
    			     que.offer(x);
    			}else {
    				out.println(que.poll());
    			}
    		}
    		out.flush();
    	}
    }
    

    方法2:

    import java.util.*;
    import java.io.*;
    public class Main {
    	static class node implements Comparable<node>{
    		public int x;
            public node(int tx){
            	x=tx;
            }
    		@Override
    		public int compareTo(node o) {
    		     if(x==o.x) return 0;
    		     return x>o.x?-1:1;
    		}
    	}
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(new InputStreamReader(System.in));
    		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    		PriorityQueue<node>que=new PriorityQueue<node>();
    		char op;
    		int n=sc.nextInt(),x;
    		while(n--!=0) {
    			op=sc.next().charAt(0);
    			if(op=='A') {
    			     x=sc.nextInt();
    			     que.add(new node(x));
    			}else {
    				out.println(que.poll().x);
    			}
    		}
    		out.flush();
    	}
    }
    
  • 相关阅读:
    lombok 下的@Builder注解用法
    (springboot)自定义Starter
    各种 Spring-Boot-Starters系列 介绍
    MQ的使用场景
    SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用
    RPC原理详解
    Java性能优化的50个细节
    thinkphp3.2.2有预览的多图上传
    关于php中的exec命令
    关于thinkphp3.1无法加载模块解决办法
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/7656652.html
Copyright © 2020-2023  润新知