数据结构复习(一) —— 最小堆

来源:互联网 发布:生化危机人工智能红后 编辑:程序博客网 时间:2024/05/22 13:49

以前做ACM, 写代码用的是C。一毫一厘的细节都得自己码。

现在倾向于问题本身的分析:该用什么算法,什么数据结构。因此Java是不二之选。


建立最小(大)堆的复杂度为O(nlogn), 更新的复杂度为O(logn)

hdu 4006 一题中, n<=1e6,需使用堆结构获得O(nlogn)复杂度的解

代码如下:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.StreamTokenizer;import java.util.Comparator;import java.util.PriorityQueue;public class Main {    public static void main(String[] args) throws IOException {        StreamTokenizer in = new StreamTokenizer(                new BufferedReader(new InputStreamReader(System.in)));        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));        while(in.nextToken() != StreamTokenizer.TT_EOF) {            int n = (int)in.nval;            in.nextToken();            int k = (int)in.nval;            PriorityQueue<Integer> queue = new PriorityQueue<Integer>(k, new Comparator<Integer>() {                @Override                public int compare(Integer a, Integer b) {                    if(a > b) {                        return 1;                    } else {                        return -1;                    }                }            });                        for(int i = 0; i < n; i++) {                in.nextToken();                char op = in.sval.charAt(0);//                System.out.println(op);                if(op == 'I') {                    in.nextToken();                    int value = (int)in.nval;                    if(queue.size() < k) {                        queue.add(value);                        continue;                    } else {                        int min = queue.peek();                        if (value > min) {                            queue.poll();                            queue.add(value);                        }                    }                } else if (op == 'Q') {//                    System.out.println("It's Q");                    out.println(queue.peek());//                    out.flush();                }            }        }        out.flush();    }}




0 0
原创粉丝点击