zoukankan      html  css  js  c++  java
  • 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();
    	}
    }
    
  • 相关阅读:
    阿里云ecs环境配置
    linux下Nginx安装Zend Optimizer组件步骤
    phpcms 按价格、按销量、按时间等排序实现思路
    云服务器 ECS Linux Web 环境配置站点的方法
    CentOS7安装和配置FTP
    Centos7安装SVN
    ExtJs桌面组件(DeskTop)
    jsapi支付,提示redirect_uri 参数错误
    php判断来源网址地址并且限制非法来源
    php正则表达式获取表格内容
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/7656652.html
Copyright © 2011-2022 走看看