寻找第K小的数,使用的方法有多种。今天,我主要是使用面试中面试官想要的方法。就是运用快排的思想在O(n)时间内得到结果。

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;int FindNumberK(vector<int>&iv,int k,int s,int e)
{int roll = iv[s],be = 0,j = s;for(int i = s+1;i <= e;++i){if(iv[i] < roll){++j;swap(iv[i],iv[j]);++be;}}swap(iv[j],iv[s]);if(be == k-1)return roll;else if(be < k-1){return FindNumberK(iv,k-1 -be,j+1,e);}elsereturn FindNumberK(iv,k,s,j-1);
}
int main()
{int n;while(cin>>n){vector<int> iv,rv;for(int i = 0;i != n;++i){int val;cin>>val;iv.push_back(val);rv.push_back(val);}int k;cout<<"Please input a K num: ";cin>>k;if(k < 0||k >= iv.size()){cout<<"Error\n";exit(1);}int res = FindNumberK(iv,k,0,iv.size()-1);cout<<"Test Result : "<<res<<endl;sort(rv.begin(),rv.end(),less<int>());cout<<"Real Result : "<<rv[k-1]<<endl;}return 0;
}

寻找第K小的数(O(n))相关推荐

  1. (寻找第K小的数amp;amp;寻找第K小的数的和)

    这一篇博客以一些OJ上的题目为载体,讲一下寻找第K小的数的方法 方法一: 先将数据排列好,然后,然后return a[k]或者将前K个数加起来 方法二: 基于高速排序.如,一次高速排序将某一个数放到了 ...

  2. 分治-寻找第k小的数

    给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素 template<class Type> Type RandomizedSelect(Type a[],i ...

  3. python递归算法 电影院票价问题_算法课堂实验报告(二)——python递归和分治(第k小的数,大数乘法问题)...

    python实现递归和分治 一.开发环境 开发工具:jupyter notebook 并使用vscode,cmd命令行工具协助编程测试算法,并使用codeblocks辅助编写C++程序 编程语言:py ...

  4. 分治算法求解列表中第k小的数

    分治算法地思想就是将复杂问题分解为简单的子问题,然后寻求子问题的地归结,并组合各个子问题的解一起得到最终复杂问题的解. 针对求解列表中第k小的数,暴力拆解法可以将列表排序然后根据索引求出列表中第k小的 ...

  5. 面试官:海量无序数据,寻找第 K 大的数,越快越好

    最近在参加阿里云举办的<第三届数据库大赛创新上云性能挑战赛--高性能分析型查询引擎赛道>,传送门: https://tianchi.aliyun.com/competition/entra ...

  6. 海量无序数据寻找第 K 大的数

    前言 最近在参加阿里云举办的<第三届数据库大赛创新上云性能挑战赛--高性能分析型查询引擎赛道>,传送门:https://tianchi.aliyun.com/competition/ent ...

  7. C语言寻找第k小元素,小技巧——查找第k小的元素

    今天分享一个小技巧,虽然是小技巧但是还是很有价值的,曾经是微软的面试题.题目是这样的,一个无序的数组让你找出第k小的元素,我当时看到这道题的时候也像很多人一样都是按普通的思维,先排序在去第K个,但是当 ...

  8. 算法-寻找第k小元素(C)

    序言 刚开始我认为,寻找第k小的元素:简单呀,先对所有元素排序,之后再找不就完事啦,这时时间复杂度在O(nlgn).那有没有更好的排序的方法了呢?答案:当然是有的. 算法基本思路: (1) 当规模小于 ...

  9. 7-1 找第k小的数 (20 分)

    设计一个平均时间为O(n)的算法,在n(1<=n<=1000)个无序的整数中找出第k小的数. 提示:函数int partition(int a[],int left,int right)的 ...

最新文章

  1. 5GS 协议栈 — PFCP 协议 — PDR 报文检测规则
  2. 文献记录(part60)--高维模型选择方法综述
  3. js pug 代码_pug模版学习(一)
  4. 2018--20179215--《文献管理与信息分析》第三讲 英文数据库资源的发展趋势和利用...
  5. Codeforces 120F Spiders
  6. DeFi协议TrueFi:TRU/ETH流动性挖矿将从Uniswap迁移至SushiSwap
  7. asp 环境配置到mysql数据库增删改查
  8. java私塾跟我学系列_java 私塾作业
  9. 酒店的月收入报表java_统计报表_宾馆明细收入报表
  10. android xml属性,android中解析XML androidxml属性大全
  11. 批处理 文件注释_批处理文件注释
  12. IDEA从Git 上down 项目报错
  13. was英文读音_英语单词was怎么读
  14. 语音芯片播报方案选型补充说明
  15. 【转载】魔方教程七步玩转魔方
  16. Flash----读写外部Flash
  17. MyBatis万能插入语句
  18. 最长公共子序列问题-----题目
  19. 仿支付宝钱包:带分割线的GridView
  20. 黑马程序员————集合框架1(day14)

热门文章

  1. MySQL数据库之索引
  2. 【网工手艺】专栏入口(网工学习实战+网络自动化运维探讨)
  3. 典型的SS7呼叫信令流程(真)
  4. Python SOCKS5 二级代理服务器 实现白名单与网络控制
  5. 历史上的今天:C 语言之父逝世;西门子诞生;乔布斯推出 NeXT 电脑
  6. android auto 华为p30手机,华为p30专业模式如何使用?
  7. 联想E480笔记本安装ubuntu16.04后没有wifi信号
  8. 【故障解决】ORA-17630: Mismatch in the remote file protocol version client 2
  9. 安装anaconda+tensorflow
  10. 拳头服务器什么时候修复,这些LOL客户端BUG你中招了吗?拳头设计师要修复,时长令人无语...