【剑指Offer面试题】 九度OJ1371:最小的K个数
题目链接地址:
http://ac.jobdu.com/problem.php?pid=1371
题目1371:最小的K个数
时间限制:1 秒内存限制:32 兆特殊判题:否提交:5938解决:1265
题目描写叙述:
输入n个整数,找出当中最小的K个数。比如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
输入:
每一个測试案例包括2行:
第一行为2个整数n。k(1<=n。k<=200000),表示数组的长度。
第二行包括n个整数。表示这n个数。数组中的数的范围是[0,1000 000 000]。
输出:
相应每一个測试案例。输出最小的k个数,并按从小到大顺序打印。
例子输入:
8 4
4 5 1 6 2 7 3 8
例子输出:
1 2 3 4
思路分析:
这题方法非常多,也是面试easy问的问题。
1. 快排后,取出前k个元素。
这种时间复杂度为O(nlogn+k),空间复杂度O(1)。
2. 用map直接统计每一个值出现的次数。
然后数出最小的k个值就可以。空间复杂度O(n)。
3. 採用小顶堆,n个元素建成一个小顶堆,将堆顶与数组的最后一个元素交换。这样最小的元素就保存在了数组的最后一个位置,k次调整后,最小的k个元素便保存在了数组的最后k个位置。时间复杂度为O(n+klogn);改变输入数组,空间复杂度为O(1),不改变输入数组空间复杂度为O(n)。
4. 用最大堆来存k个数,剩下的n-k个数每一个都和堆顶比較,比堆顶小时。就把堆顶元素替换掉。
採取先pop()后push()的方法替换。时间复杂度为O(k+(n-k)logk)。空间复杂度O(k)。(适合海量数据处理)
代码
方法四代码:
优先队列就是大顶堆。队头元素最大。
http://www.cppblog.com/darren/archive/2009/06/09/87224.html
/*********************************
【剑指Offer面试题】 九度OJ1371:最小的K个数
Author:牧之丶 Date:2015年
Email:bzhou84@163.com
**********************************/
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cstring>
#include <math.h>
#include <stack>
#include <vector>
#include <queue>
#include <iostream>
#include<algorithm>
#include <map>
#include <queue>
using namespace std;
int main()
{
// 大顶堆
priority_queue<int, vector<int>, less<int> > pQueue;
vector<int> result;
int n, k;
int i, tmp;
while(scanf("%d%d", &n, &k)!=EOF){
while(!pQueue.empty()){
pQueue.pop();
}
result.clear();
if(k > n){
k = n;
}
for(i = 0; i < k; ++i){
scanf("%d", &tmp);
pQueue.push(tmp);
}
for(i = k; i < n; ++i){
scanf("%d", &tmp);
if(tmp < pQueue.top()){
pQueue.pop();
pQueue.push(tmp);
}
}
while(!pQueue.empty()){
result.push_back(pQueue.top());
pQueue.pop();
}
for(i = (int)result.size() - 1; i >= 0; --i){
if(i == (int)result.size() - 1){
printf("%d", result[i]);
}else{
printf(" %d", result[i]);
}
}
printf("\n");
result.clear();
}
return 0;
}
/**************************************************************
Problem: 1371
Language: C++
Result: Accepted
Time:980 ms
Memory:2292 kb
****************************************************************/
【剑指Offer面试题】 九度OJ1371:最小的K个数的更多相关文章
- 【剑指offer】求一组数据中最小的K个数
题目:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. *知识点:Java PriorityQueue 调整新插入元素 转自h ...
- 《剑指offer》— JavaScript(29)最小的K个数
最小的K个数 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 思路一 使用JavaScript的Array对象的so ...
- 剑指Offer - 九度1371 - 最小的K个数
剑指Offer - 九度1371 - 最小的K个数2013-11-23 15:45 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是 ...
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer——面试题15:二进制中 1的个数
// 面试题15:二进制中1的个数 // 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如 // 把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. #inc ...
- 剑指offer 面试题. 二叉搜索树的第k个结点
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 解: 由于二叉搜索树的中序遍历是升序,所以在中 ...
- 九度 1371 最小的K个数
题目描述:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 输入: 每个测试案例包括2行:第一行为2个整数n,k(1<= ...
- 【剑指Offer面试题】 九度OJ1389:变态跳楼梯
转自:http://www.myexception.cn/program/1973966.html 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2331解决:1332 题目描述: 一只青蛙一次 ...
- 【剑指Offer面试题】 九度OJ1518:反转链表
与其非常快写出一段漏洞百出的代码,倒不如细致分析再写出鲁棒的代码. 提前想好測试用例(输入非空等等)进行測试改动代码. 题目链接地址: http://ac.jobdu.com/problem.php? ...
随机推荐
- Unity的Json解析<二>–写Json文件
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50378805 作者:car ...
- invalid application of `sizeof' to incomplete type `char[] '
在写代码时,我想用extern来关联一个数组,然后利用sizeof计算数组的大小,代码如下: ... extern char a[]; #define b size=(sizeof(a)/sizeof ...
- SpringBoot中打包设置,将配置文件打包在外部
一.每次用maven的打包工具打包的时候 总是将配置文件一起打包进jar中!配置文件有点小修改就要重新打包很麻烦!!!!为了解决这一麻烦!找 了很多方法,下面的配置已经实现可用 我的项目目录结构如下 ...
- 洛谷 P2111 考场奇遇
P2111 考场奇遇 题目背景 本市的某神校里有一个学霸,他的名字叫小明(为了保护主人公的隐私,他的名字都用“小明”代替).在这次的期中考试中,小明同学走桃花运,在考场上认识了一位女生,她的名字叫小红 ...
- 《深入理解Android 卷III》第五章 深入理解Android输入系统
<深入理解Android 卷III>即将公布.作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白.即Android Framework中和UI相关的部分. ...
- spring RestTemplate 实例(NameValuePair)
第一种: public List<NameValuePair> getThirdsysPermissionRest(String url,ThirdsysFuncpDTO thirdsys ...
- 使用默认system_health分析死锁(Deadlock)
在2008之前我们分析死锁须要用profiler trace或者trace flag 1222,1204.在2008中引入了一个新功能:Extended Events(扩展事件).能够监控Deadlo ...
- Linux内核编译測试
内核编译: Step 1:配置内核编译选项. make menuconfig Optional Step :排除编译结果文件(.o)等之间的依赖性. make mrproper Optional St ...
- C++ 虚函数的缺省參数问题
前些日子,有个同学问我一个关于虚函数的缺省參数问题.他是从某个论坛上看到的.可是自己没想通.便来找我. 如今分享一下这个问题.先看一小段代码: #include <iostream> us ...
- RSA in .net and dotnet core
dotnet RSAParameters Struct https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography ...