30 最小的k个数
输入n个整数,找出其最小的k个数,例如输入4,5,1,6,2,7,3,8,最小的4个数为1,2,3,4
解法一:快排思想,会改变原数组 O(n)
注意是vector<int>&
C++:
class Solution {
public:
int Partition(vector<int>& input, int left , int right){
int k = left ;
for (int i = left ; i < right ; i++){
if (input[i] < input[right]){
if (k!=i)
swap(input[i],input[k]) ;
k++ ;
}
}
swap(input[right],input[k]) ;
return k ;
} vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
int len = input.size() ;
vector<int> output ;
if (k > len || k<=)
return output ;
int left = ;
int right = len - ;
int index = Partition(input,left,right) ;
while(index != k-){
if (index > k-){
right = index - ;
index = Partition(input,left,right) ;
}else{
left = index + ;
index = Partition(input,left,right) ;
}
}
for (int i = ; i < k ; i++)
output.push_back(input[i]) ;
return output ;
}
};
解法二:维护一个大小为k的容器,每次将容器中最大的数字用小数字替换掉
O(nlogk)
如果有海量数据,没法一次放入内存中,可用这种方法
可用大顶堆或者红黑树
C++:
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
int len = input.size() ;
if (k > len || k <= )
return vector<int>() ;
multiset<int,greater<int> > res ;
for(int num : input){
if (res.size() < k){
res.insert(num) ;
}else{
if(num < *(res.begin())){
res.erase(*(res.begin())) ;
res.insert(num) ;
}
}
}
return vector<int>(res.begin() , res.end()) ;
}
};
java:
import java.util.ArrayList;
import java.util.PriorityQueue;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) {
if (k > input.length || k <= 0)
return new ArrayList<Integer>() ;
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1,o2) -> o2-o1) ;
for(int num : input){
if (maxHeap.size() < k){
maxHeap.add(num) ;
}else{
if (num < maxHeap.peek()){
maxHeap.poll() ;
maxHeap.add(num) ;
}
}
}
return new ArrayList<Integer>(maxHeap) ;
}
}
30 最小的k个数的更多相关文章
- 剑指Offer:面试题30——最小的k个数(java实现)
问题描述: 输入n个整数,找出其中最小的k个数 思路1: 先排序,再取前k个 时间复杂度O(nlogn) 下面给出快排序的代码(基于下面Partition函数的方法) public void Quic ...
- 面试题30.最小的k个数
题目:输入n个整数,找出其中最小的k个数,例如输入4,5,1,6,2,7,3,8 这8个数字,则最小的四个数字为1,2,3,4, 这道题是典型的TopK问题,剑指Offer提供了两种方法来实现,一种方 ...
- 30:最小的K个数
import java.util.ArrayList; import java.util.TreeSet; /** * 面试题30:最小的K个数 * 输入n个整数,找出其中最小的K个数.例如输入4,5 ...
- 剑指offer面试题30:最小的k个数
一.题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 二.解题思路 1.思路1 首先对数组进行排序,然后取出前k个数 ...
- (剑指Offer)面试题30:最小的k个数
题目: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路: 1.排序 把输入的n个整数排序,然后取前k个数: 时间复杂度 ...
- 【剑指offer】面试题30:最小的 k 个数
题目: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路: 这个是O(nlogk)时间复杂度的思路:用一个容器来保存最先 ...
- 【面试题030】最小的k个数
[面试题030]最小的k个数 题目: 输入n个整数,找出其中最小的k个数. 例如输入4.5.1.6.2.7.3.8这8个字,则其中最小的4个数字是1.2.3.4. 思路一: ...
- 剑指Offer面试题:27.最小的k个数
一.题目:最小的k个数 题目:输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 这道题是典型的TopK问题,其最简单的思路莫过于 ...
- 算法练习:寻找最小的k个数
参考July的文章:http://blog.csdn.net/v_JULY_v/article/details/6370650 寻找最小的k个数题目描述:查找最小的k个元素题目:输入n个整数,输出其中 ...
随机推荐
- 【Asp.net入门02】搭建Asp.net开发环境
本节主要讲解: 什么是asp.net asp.net开发和运行环境介绍 1.什么是ASP.NET Asp.net不是一种编程语言,而是一种开发技术.我们可以利用这种技术所提供的类库,使用C#或者VB编 ...
- Python模拟登录cnblogs
Python利用requests.Session对象模拟浏览器登录cnblogs request.Session对行可以跨请求的保持cookie,非常方便的用于模拟登录. cnblogs登录页面分析: ...
- codevs 1080 线段树练习 CDQ分治
codevs 1080 线段树练习 http://codevs.cn/problem/1080/ 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 一行N个 ...
- OpenResty 扩展库之(一)——lua-resty-shell 库
介绍 当您需要执行子进程(或shell命令)时,这是一个打算与OpenResty应用程序一起使用的小型库. 它类似于os.execute和io.popen,除了它是完全非阻塞的,因此即使对于需要很长时 ...
- Android的音频解码原来是直接调用的本地C方法直接通过硬件解码
Android就是披着JAVA外衣的C啊~音频解码原来是直接调用的本地C方法直接通过硬件解码的,JAVA和C的字节数组存放模式不同(java是大端,C根据不同平台不同),不同格式需要转化以后才能用. ...
- [问题]SqlServer创建数据库出错
SqlServer 2008 “Msg 1807, Level 16, State 3, Line 1Could not obtain exclusive lock on database ‘mode ...
- 11个实用的CSS学习工具[转载收藏]
1. 盒子模型的幻灯片 通过3D转换效果产生的互动的幻灯片.按向左或向右箭头键切换,全屏观看会有更好的效果. 2. CSS Diner 通过一个简单的小游戏让你学习CSS selector,输入正确的 ...
- SQL查找数据库中所有没有主键的数据表脚本
--SQL查找数据库中所有没有主键的数据表脚本 --运行脚本后在消息中可能会显示下面现象中的一种:--(1)数据库中所有数据表都有主键(则证明所有数据表都有主键)--(2)当前数据表[数据表名]没有主 ...
- opencv的基本数据结构(一)(转)
从2001年以来,opencv的函数库一直是基于C接口构建的,因此在opencv1.0版本中,一般使用IplImage的C结构体在内存中存储图像,因此,我们在很多较经典的书籍或者开源项目中依然可见Ip ...
- 【解析】解析XML
一.dom4j import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelp ...