TopK
网易面试挂了,伤心。
一面面试官不是搞技术的,二面面试官搞ios,全程不问JVM,并发的知识,运气真差
而且手撸代码硬伤,没得编译
准备先在IDE敲一遍,在再纸上面写一遍。
package com.qiuzhao.test; import java.util.PriorityQueue;
import java.util.Queue; /**
* @Auther: Chang
* @Date: 2018/8/27
*/
public class topK {
public static void main(String[] args) { int[] a = {489, 500, 111, 100, 2, 7, 3, 8, 66, 888};
int k = 3;
// 第一种 推排序
prioritySort(a, k);
// 第二种 快速排序
quickSort(a, k);
} // 堆排序 int[] a = {489, -5, 111, 100, 2, 7, 3, 8, 66, 88};
private static void prioritySort(int[] a, int k) {
Queue<Integer> pq = new PriorityQueue<>(k);
for (int i = 0; i < a.length; i++) {
int n = pq.size();
if (n >= k && a[i] > pq.peek()) {
pq.poll();
}
n = pq.size();
if (n < k) pq.add(a[i]);
}
pq.forEach(x -> System.out.print(x + " "));
System.out.println();
} private static void quickSort(int[] a, int k) { int left = 0;
int right = a.length - 1;
int mid = partition(a, left, right);
while (mid != k) {
if (mid > k) {
right = mid - 1;
mid = partition(a, left, right);
} else {
left = mid + 1;
mid = partition(a, left, right);
}
}
for (int i = 0; i < mid; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
} private static int partition(int[] a, int left, int right) { int temp = a[left];
while (left < right) {
while (left < right && a[right] <= temp) right--;
a[left] = a[right];
while (left < right && a[left] >= temp) left++;
a[right] = a[left];
}
a[left] = temp;
return left;
}
}
TopK的更多相关文章
- [数据结构]——堆(Heap)、堆排序和TopK
堆(heap),是一种特殊的数据结构.之所以特殊,因为堆的形象化是一个棵完全二叉树,并且满足任意节点始终不大于(或者不小于)左右子节点(有别于二叉搜索树Binary Search Tree).其中,前 ...
- 关于堆排序和topK算法的PHP实现
问题描述 topK算法,简而言之,就是求n个数据里的前m大个数据,一般而言,m<<n,也就是说,n可能有几千万,而m只是10或者20这样的两位数. 思路 最简单的思路,当然是使用要先对这n ...
- MapReduce实现TopK的示例
由于开始学习MapReduce编程已经有一段时间了,作为一个从编程中寻找自信和乐趣以及热爱编程的孩子来讲,手开始变得很“痒”了,很想小试一下身手.于是自己编写了TopK的代码.TopK的意思就是从原文 ...
- InAction-MR的topK
本来只是想拿搜狗的数据练练手的,却无意踏足MR的topK问题.经过几番波折,虽然现在看起来很简单,但是摸爬滚打中也学到了不少 数据是搜狗实验室下的搜索日志,格式大概为: 00:00:00 298219 ...
- MapReduce TopK统计加排序
Hadoop技术内幕中指出Top K算法有两步,一是统计词频,二是找出词频最高的前K个词.在网上找了很多MapReduce的Top K案例,这些案例都只有排序功能,所以自己写了个案例. 这个案例分两个 ...
- [151225] Python3 实现最大堆、堆排序,解决TopK问题
参考资料: 1.算法导论,第6章,堆排序 堆排序学习笔记及堆排序算法的python实现 - 51CTO博客 堆排序 Heap Sort - cnblogs 小根堆实现优先队列:Python实现 -cn ...
- Topk引发的一些简单的思考
软件工程课程的一个题目:写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来.文本文件大约是30KB~300KB大小. 首先说一下这边的具体的实现都是在linux上实现的. ...
- hadoop记录topk
lk@lk-virtual-machine:~$ cd hadoop-1.0.1 lk@lk-virtual-machine:~/hadoop-1.0.1$ ./bin dfs -mkdir inpu ...
- Python使用heapq实现小顶堆(TopK大)、大顶堆(BtmK小)
Python使用heapq实现小顶堆(TopK大).大顶堆(BtmK小) | 四号程序员 Python使用heapq实现小顶堆(TopK大).大顶堆(BtmK小) 4 Replies 需1求:给出N长 ...
- Mapreduce TopK
思想比较简单,就是每个通过map来获取当前的数据块中的的topk个数据,然后将他们以相同的key值放到reduce中,最后通过reduce来对这n*k个数据排序并获得topk个数据.具体的就是建立 ...
随机推荐
- Matching Networks for One Shot Learning
1. Introduction In this work, inspired by metric learning based on deep neural features and memory a ...
- JAVA 8 主要新特性 ----------------(一)总纲
一.版本中数据结构的修改浅析 二.JDK1.8优点概括 三.新功能Lambda表达式入门 四.Lambda函数式接口 五.Lambda方法引用与构造器引用 六.集合Stream API 七.新时间日期 ...
- 获取input标签中file的内容
1.直接获取文件中的内容: <form id="form" method="post" enctype="multipart/form-data ...
- 第一周Access课总结
一.问:这节课学到了什么知识? 答:这周课程迎来新的学习领域,作为初次学Access有了一定的了解,Access是office办公软件中的一个极为重要的组成部分,它可以对大量的数据进行存储,查找,统计 ...
- 使用ILMerge 打包C# 绿色免安装版程序
使用ILMerge工具,将C#项目debug目录下的exe及其依赖的dll文件打包成一个exe文件,直接双击就可运行. 使用工具: ILMerge :http://www.microsoft.com/ ...
- docker 安装 RabbitMQ
1.镜像中国(http://www.docker-cn.com/registry-mirror):直接使用https://hub.docker.com下载镜像比较慢,使用镜像中国加速 使用例子:$ d ...
- idea : shorten command line
[官方文档]:IntelliJ IDEA 2017.3 EAP: Configurable command line shortener and more 如果类路径太长,或者有许多VM参数,程序就无 ...
- Dispatch Queue 之 dispatch_sync

- 聊聊我面试过的一个最奇葩的 Java 程序猿!
上周我聊了聊最让我反感的 10 种程序猿,无奈一个小时就进行了删除,详细原因就不说了,容易招黑. 今天聊的我面试过的最奇葩的一个程序猿,绝对是奇葩中的奇葩,简直是程序猿中的另类,最让我反感的程序猿又添 ...
- vscode中iview的</Col>标签报错问题
直接看问题截图: 这是vetur中eslint的问题,在vscode菜单中,文件->首选项->设置 找到 “vetur.validation.template”: true 将其改为fal ...