博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指Offer题40:最小的k个数:快速排序,优先队列
阅读量:2085 次
发布时间:2019-04-29

本文共 1268 字,大约阅读时间需要 4 分钟。

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

示例 1:

输入:arr = [3,2,1], k = 2

输出:[1,2] 或者 [2,1]

示例 2:

输入:arr = [0,1,2,1], k = 1
输出:[0]

1.优先队列,队列中先输入前k个元素,然后将剩余元素与队顶元素比较,小于队顶元素则弹出队顶元素并将当前元素进队,否则不进队。

2.快速排序:以下标返回值是否为k-1为判断依据,当返回值等于k-1则下表为k-1的元素及其左边元素全部即为前k个最小的数。如果返回值大于k则对返回值下表及其左边元素继续快速排序,如果返回值小于k则对返回值下标及其右边元素继续排序。

class Solution40 {
public: //优先队列 vector
getLeastNumbers(vector
& arr, int k) {
priority_queue
q; vector
res; int n = arr.size(); if(n
getLeastNumbers1(vector
& arr, int k) { vector
res; int n = arr.size(); if(n == 0) return res; res = QuickResearch(arr,0,n-1,k-1); return res; } vector
QuickResearch(vector
& arr,int lo,int hi,int k) { int low ; low = quickSort(arr,lo,hi); if(low == k) { vector
res; for(int i = 0;i<=k;i++) { res.push_back(arr[i]); } return res; } return low >k?QuickResearch(arr,0,low-1,k):QuickResearch(arr,low+1,hi,k); } int quickSort(vector
& arr,int l ,int h) { int i = l; int j = h; int x = arr[i]; do { while(i
= x) { j--; } if(i

转载地址:http://wssqf.baihongyu.com/

你可能感兴趣的文章
Spark源码剖析——Master、Worker启动流程
查看>>
TensorFlow2 学习——MLP图像分类
查看>>
TensorFlow2 学习——CNN图像分类
查看>>
Spark源码剖析——SparkSubmit提交流程
查看>>
TensorFlow2 学习——RNN生成古诗词
查看>>
Spark源码剖析——SparkContext实例化
查看>>
基于阿里云的数据仓库架构设计
查看>>
Docker——安装、常用命令、生成镜像(Dockerfile)
查看>>
OpenCV学习——图像基础与几何变换
查看>>
OpenCV学习——图像特效
查看>>
Spark源码剖析——Action操作、runJob流程
查看>>
分布式——缓存一致性(Redis、MySQL)
查看>>
Gminer 配置参数
查看>>
Linux学习笔记——20170802
查看>>
Linux学习笔记——20170803
查看>>
Linux学习笔记——20170804
查看>>
Linux学习笔记——20170805
查看>>
Linux学习笔记——20170807
查看>>
MySQL学习笔记——20170808
查看>>
MySQL学习笔记——20170809
查看>>