215. Kth Largest Element in an Array

快速排序法,选择一个数,比这个数大的交换到左边,比这个数小的交换到右边。

class Solution {
public int findKthLargest(int[] nums, int k) {
shuffle(nums);
k = nums.length - k;
int lo = 0, hi = nums.length - 1;
while(lo < hi){
final int j = partition(nums, lo, hi);
if(j < k){
lo = j + 1;
}else if( j > k){
hi = j - 1;
}else{
break;
}
}
return nums[k];
} public int partition(int[] a, int lo, int hi){
int i = 0;
int j = hi + 1;
while(true){
while(i < hi && less(a[++i], a[lo]));
while(j > lo && less(a[lo], a[--j]));
if(i >= j){
break;
}
swap(a, i, j);
}
swap(a, lo, j);
return j;
} public void swap(int[] a, int i, int j){
int tmp = a[i];
a[i] = a[j];
a[j] =tmp;
} private void shuffle(int a[]) { final Random random = new Random();
for(int ind = 1; ind < a.length; ind++) {
final int r = random.nextInt(ind + 1);
swap(a, ind, r);
}
} public boolean less(int v, int m){
return v < m;
}
}

347. Top K Frequent Elements

用桶排序原则,bucket[]的下标表示出现的次数。用HashMap放入数字和出现的次数并放入对应的bucket中,最后从后向前取出。

HashMap.getOrDefault(n,0), 返回Key对应的Value,没有则返回0

HashMap.keySet(): 获取所有 Key

class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
List<Integer>[] bucket = new List[nums.length + 1];
Map<Integer, Integer> frequencyMap = new HashMap<Integer, Integer>(); for(int n : nums){
frequencyMap.put(n, frequencyMap.getOrDefault(n, 0) + 1);
} for(int key : frequencyMap.keySet()){
int frequency = frequencyMap.get(key);
if(bucket[frequency] == null){
bucket[frequency] = new ArrayList<>();
}
bucket[frequency].add(key);
} List<Integer> res = new ArrayList<>();
for(int pos = bucket.length - 1; pos >= 0 && res.size() < k; pos--){
if(bucket[pos] != null){
res.addAll(bucket[pos]);
}
}
return res;
}
}

11/10 <priorityQueue> 215 347的更多相关文章

  1. 微信iphone7、 ios10播放视频解决方案 2016.11.10

    2016.11.10日更新以下方法 微信最新出同层播放规范 即使是官方的也无法解决所有android手机的问题. 另外iphone 5 .5s 某些手机始终会弹出播放,请继续采用 “以下是老的解决办法 ...

  2. ubuntu 11.10 安装apache2 tomcat6

    ubuntu 11.10 安装apache2 tomcat6 导读 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目 ...

  3. 【转】ubuntu 11.10(32位系统)下编译android源码

    原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3 ...

  4. Ubuntu 11.10 安装GMONE3,卸载 UNITY和UNITY 2D

    Ubuntu 11.10安装GNOME3: 1)sudo apt-get install gnome-shell    sudo apt-get install gnome-themes*   (或者 ...

  5. 在Ubuntu 11.10工具栏上用数字显示网速、CPU负荷和内存占用量『译』

    基本上照抄了<How To Display Network Upload / Download Speed On The Panel In Ubuntu 11.04>,只不过我的实践环境是 ...

  6. Ubuntu 11.10 Server下搭建Maven私服

      安装Nexus服务的文档可以参考官方站点:http://www.sonatype.com/books/nexus-book/reference/install-sect-install.html ...

  7. Ubuntu 11.10下GRUB 2 1.99版编译安装笔记

    Ubuntu 11.10下GRUB 2 1.99版编译安装笔记 以下的安装笔记,都是QLi自己学习grub2 时,所整理的,还是新手,有错误的话,请大家帮忙就别提出来了. 最新版grub V1.99官 ...

  8. 显示 Ubuntu 11.10 的 终端窗口

    显示 Ubuntu 11.10 的 终端窗口 一.点击左上角的图标 -> 在search框里搜索termial . 二.快捷键:Ctrl+Alt+t.

  9. 下面程序的输出结果是____ A:11,10 B:11,11 C:10,10 D:10,11 int x=10; int y=x++; printf("%d,%d",(x++,y),y++);

    下面程序的输出结果是____ A:11,10 B:11,11 C:10,10 D:10,11 int x=10; int y=x++; printf("%d,%d",(x++,y) ...

随机推荐

  1. WIFI Portal登录

    开头 关于 ANDROID 5.0-7.1.2 网络图标上的感叹号及其解决办法-狐狸的小小窝 HTTP状态码之204 No Content 原理 访问generate_204地址,如果得到状态码是20 ...

  2. keras和tensorflow搭建DNN、CNN、RNN手写数字识别

    MNIST手写数字集 MNIST是一个由美国由美国邮政系统开发的手写数字识别数据集.手写内容是0~9,一共有60000个图片样本,我们可以到MNIST官网免费下载,总共4个.gz后缀的压缩文件,该文件 ...

  3. Ubuntu 安装git及git命令

    1.检查git是否已经安装,输入git version命令即可,如果没有显示版本号表示没有安装git 2.安装git sudo apt-get install git 3.配置git全局环境git c ...

  4. 物联网架构成长之路(33)-EMQ数据存储到influxDB

    一.前言 时隔一年半,技术变化特别快,学习也要跟上才行.以前写过EMQ数据转存问题,当时用了比较笨的方法,通过写插件的方式,把MQTT里面的数据发送到数据库进行存储.当时也是为了学习erlang和em ...

  5. linux root用户无法删除文件,提示permission denied

    我用root用户登录,删除一个普通的文件,怎么删也删不了.最后用lsattr命令查看,原来是被保护了.lsattr查看一个文件 1. chattr权限简介 chattr - change file a ...

  6. (二十四)golang--错误处理

    在默认情况下,遇到错误时,程序会崩溃: 在发生错误时,我们可以捕获错误,使程序可以继续运行,并抛出错误提示: 错误处理: (1)Go语言追求简洁优雅,所以不支持传统的try catch finally ...

  7. 使用App.Metrics监控消息队列

    使用App.Metrics监控消息队列 一.简介 App Metrics是一个开放源代码和跨平台的.NET库,用于记录应用程序中的指标.App Metrics可以在.NET Core或也支持.NET ...

  8. 入门理解mysql-binlog

    mysql-binlog简介: mysql的二进制日志记录了所有DDL和DML(除select) 开启binlog日志后会有1%左右的的性能损耗 二进制日志包括两类 索引文件 XXXX.index 日 ...

  9. PDF文件添加二维码水印教程

    maven配置iText的jar,主要不是所有私服都有iText的jar,maven仓库没有的,可以去https://mvnrepository.com/artifact/com.itextpdf/i ...

  10. SimdJsonSharp:每秒解析千兆字节的JSON

    SimdJsonSharp: Parsing gigabytes of JSON per second C# version of lemire/simdjson (by Daniel Lemire ...