数据结构复习(一) —— 最小堆
来源:互联网 发布:生化危机人工智能红后 编辑:程序博客网 时间: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
- 数据结构复习(一) —— 最小堆
- 数据结构复习——堆
- 复习数据结构:排序算法(六)——堆排序
- 数据结构复习笔记— —堆
- 数据结构(C++) —— 最小堆(mainHeap)
- 算法复习(一)——最小生成树
- 数据结构——最大堆和最小堆(C语言)
- 复习数据结构:排序(一)——插入排序
- 数据结构复习——线性表(一)数组
- (复习)数据结构--堆--附模板
- 数据结构复习之堆
- 数据结构——最小最大堆(C语言)
- 数据结构——最小堆的实现总结
- 数据结构复习笔记(一)
- 数据结构复习笔记(一)
- 剑指offer——最小的K个数(堆排或partition,复习排序算法思想精髓)
- 数据结构(c++)最小堆模板类
- 数据结构之最小堆
- 人生领悟
- GDB
- asp.net向自定义控件传递参数-两个例子
- Ubuntu安装二:在VM中安装Ubuntu
- 深入理解Linux内存映射机制
- 数据结构复习(一) —— 最小堆
- ffmpeg
- 数值转换为字符换(1)
- 二叉树的后序遍历(非递归算法)
- △【OJ】---S---复数类,重载运算符+,-,*,/
- C#实现MD5加密
- 黑马程序员 C语言较为常见的注意2
- 01背包问题
- 奥特曼跑酷