题目描述

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

代码:

// 这种topN问题比较常见的是使用堆来解决,最小的k个数就采用最大堆,最大的k个数就采用最小堆.
// 此外任然可以用快排来解决. class Solution {
public:
int Partition(vector<int> &input, int left, int right) {
if (left > right)
return left;
int key = input[left];
int i = left;
int j = right;
while(i<j) {
// 从右往左遍历
while (i < j && input[j] >= key) {
j--;
} // 交换
if (i < j) {
input[i] = input[j];
i++;
} // 从左往右遍历
while(i<j && input[i] <= key) {
i++;
} // 交换
if (i<j) {
input[j] = input[i];
j--;
}
}
input[i] = key;
return i;
} void QuickSort(vector<int> &input, int k, int left, int right) {
if (left >= right) return;
int mid = Partition(input, left, right);
if (mid == k-1) return;
else if(mid > k-1) QuickSort(input, k, left, mid-1);
else if (mid < k-1) QuickSort(input, k, mid+1, right);
} vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
vector<int> res;
if ((size_t)k > input.size())
return res;
else{
QuickSort(input, k, 0, input.size()-1);
res.insert(res.end(), input.begin(), input.begin()+k);
}
return res;
}
};

只是快排是能够解决这个问题的,不过这里对快排进行了一点更改,减小了时间复杂度.

2-剑指offer: 最小的K个数的更多相关文章

  1. 剑指offer 最小的k个数 、 leetcode 215. Kth Largest Element in an Array 、295. Find Median from Data Stream(剑指 数据流中位数)

    注意multiset的一个bug: multiset带一个参数的erase函数原型有两种.一是传递一个元素值,如上面例子代码中,这时候删除的是集合中所有值等于输入值的元素,并且返回删除的元素个数:另外 ...

  2. 剑指Offer——最小的K个数

    题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 分析: 建一个K大小的大根堆,存储最小的k个数字. 先将K个数进堆 ...

  3. python剑指offer最小的K个数

    题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路: 使用快排中的partition思想. ①我们设定part ...

  4. 用js刷剑指offer(最小的K个数)

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 牛客网链接 js代码 function GetLeastNumbe ...

  5. 剑指 Offer——最小的 K 个数

    1. 题目 2. 解答 2.1. 方法一--大顶堆 参考 堆和堆排序 以及 堆的应用,我们将数组的前 K 个位置当作一个大顶堆. 首先建堆,也即对堆中 [0, (K-2)/2] 的节点从上往下进行堆化 ...

  6. 剑指offer--10.最小的K个数

    边界判断,坑了一下 ----------------------------------------------- 时间限制:1秒 空间限制:32768K 热度指数:375643 本题知识点: 数组 ...

  7. 剑指Offer-29.最小的K个数(C++/Java)

    题目: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 分析: 最先想到的是将数组升序排列,返回前k个元素.不过排序的话效率 ...

  8. 剑指:最小的k个数

    题目描述 输入 n 个整数,找出其中最小的 K 个数.例如输入 4,5,1,6,2,7,3,8 这 8 个数字,则最小的 4 个数字是 1,2,3,4. 解法 解法一 利用快排中的 partition ...

  9. 剑指Offer28 最小的K个数(Partition函数应用+大顶堆)

    包含了Partition函数的多种用法 以及大顶堆操作 /*********************************************************************** ...

随机推荐

  1. [LeetCode] 269. Alien Dictionary 另类字典

    There is a new alien language which uses the latin alphabet. However, the order among letters are un ...

  2. shell 读取yaml 之 shyaml

    安装shyaml pip3. install shyaml file.yaml文件内容---idc_group: name: bx bx: news_bx: news_bx web3_bx: web3 ...

  3. uwsgi异常服务器内存cpu爆满

    记录线上服务器通过linux性能检测工具glances检测到 cpu.内存爆满,且是uwsgi进程占用,对于服务器内核,以及uwsgi配置优化 参考文章 https://blog.csdn.net/o ...

  4. 推荐一款来电秀App 最来电

    推荐一款来电秀App 最来电 1 介绍 最来电app,本款软件是一款集合来电视频秀.动态壁纸.个性铃声等主题美化工具类软件. 2 特色功能介绍 来电视频秀:旨在丰富用户来电后接通前的等待过程,增强通话 ...

  5. vue 学习注意事项

    一:插值方式: 1:数据绑定,最常见的形式就是使用 “Mustache” 语法(双大括号)的文本插值 <span>Message: {{ msg }}</span>  通过使用 ...

  6. Eclipse JAX-RS (REST Web Services) 2.0 requires Java 1.6 or newer

    pom.xml文件中添加: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins&l ...

  7. node 读取超大Excel 文件,提取数据

    之前是用 node-xlsx 来处理excel文件,主要是读取数据或者根据数据生成excel文件.不过,node-xlsx 似乎无法处理超大的excel(100MB以上),例如: var xlsx = ...

  8. pytorch_01_基础_一维线性回归

    pytorch基础 pytorch官方文档:https://pytorch.org/docs/master/nn.html#linear-layers import torchfrom torch i ...

  9. TPM(ThinkPHPMobile)使用简明教程

    TPM还有很多特性,它不仅能和ThinkPHP结合,也可以结合自己已有的接口.还有一些附件插件帮助我们实现一些常用功能 一.基础知识 1 手机APP的类型 移动端的应用有这几种:WebApp,Nati ...

  10. [转帖]Linux监测某一时刻对外的IP连接情况

    Linux监测某一时刻对外的IP连接情况 https://blog.csdn.net/twt326/article/details/81454171 公司机器有病毒 需要分析一下. 之前有需要,在CS ...