求第k小的数
题目链接:第k个数
题意:求n个数中第k小的数

题解:
//由快速排序算法演变而来的快速选择算法
#include<iostream>
using namespace std;
const int N=1e5+10;
int a[N];
//k是整个区间中的第k小的数。
void quick(int l,int r,int k)
{//快速选择算法保证每次递归时都递归到答案所在的区间.
int i=l-1,j=r+1,x=a[l+r>>1];
if(l>=r)return a[r];
while(i<j)
{
while(a[++i]<x);
while(a[--j]>x);
if(i<j)swap(a[i],a[j]);
}
cout<<"i: "<<i<<"j: "<<j<<"x: "<<x<<endl;
quick(l,j);
quick(j+1,r);
}
/*
5
2 3 4 5 1
i: 3j: 2x: 4
i: 2j: 1x: 3
i: 1j: 0x: 2
i: 4j: 3x: 5
1 2 3 4 5
通过一组测试数据发现i+1==x,i-1=j; j是x在数组中的下标
得到数组中比<=x的数有j+1个
扩展问题:求第k大的数
基础问题:求第k小的数
每次统计<=x的数的个数及j+1,如果j+1<=cnt左边去递归
否则右边去递归
*/
int main()
{
int n,k;cin>>n>>k;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
quick(0,n-1,k);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
代码:
#include<iostream>
using namespace std;
const int N=1e6+10;
int a[N];
int quick(int l,int r,int k)
{
int i=l-1,j=r+1,x=a[l+r>>1];
if(l>=r)return a[l];
while(i<j)
{
while(a[++i]<x);
while(a[--j]>x);
if(i<j)swap(a[i],a[j]);
}
int sl=j-l+1;
if(sl>=k)
quick(l,j,k);
else
quick(j+1,r,k-sl);
}
int main()
{
int n,k;cin>>n>>k;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
cout<<quick(0,n-1,k);
}
求第k小的数的更多相关文章
- *HDU2852 树状数组(求第K小的数)
KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- [LeetCode] 4. Median of Two Sorted Arrays(想法题/求第k小的数)
传送门 Description There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the m ...
- 求第k小的数 O(n)复杂度
思路:利用快速排序的思想,把数组递归划分成两部分.设划分为x,数组左边是小于等于x,右边大于x.关键在于寻找一个最优的划分,经过 Blum . Floyd . Pratt . Rivest . Tar ...
- 基于快速排序思想partition查找第K大的数或者第K小的数。
快速排序 下面是之前实现过的快速排序的代码. function quickSort(a,left,right){ if(left==right)return; let key=partition(a, ...
- 最快效率求出乱序数组中第k小的数
题目:以尽量高的效率求出一个乱序数组中按数值顺序的第k 的元素值 思路:这里很容易想到直接排序然后顺序查找,可以使用效率较高的快排,但是它的时间复杂度是O(nlgn),我们这里可以用一种简便的方法,不 ...
- 无序数组求第k大/第k小的数
根据http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 博客中所总结的7种解法,我挑了其中的解法3和解法6进行了实现. 解法3: ...
- 树状数组求第k小的元素
int find_kth(int k) { int ans = 0,cnt = 0; for (int i = 20;i >= 0;i--) //这里的20适当的取值,与MAX_VAL有关,一般 ...
- [LeetCode] Find K-th Smallest Pair Distance 找第K小的数对儿距离
Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pai ...
- #7 找出数组中第k小的数
「HW面试题」 [题目] 给定一个整数数组,如何快速地求出该数组中第k小的数.假如数组为[4,0,1,0,2,3],那么第三小的元素是1 [题目分析] 这道题涉及整数列表排序问题,直接使用sort方法 ...
随机推荐
- ceph 快照,克隆
转载 https://my.oschina.net/wangzilong/blog/1595081 ceph 快照,克隆 ceph是一个非常好的后端存储系统.其中包括最常用的块存储,对象存储,文件系统 ...
- flink创建视图的几种方式
import org.apache.flink.api.common.typeinfo.BasicTypeInfo; import org.apache.flink.api.java.typeutil ...
- 揭秘日活千万腾讯会议全量云原生化上TKE技术实践
腾讯会议,一款联合国都Pick的线上会议解决方案,提供完美会议品质和灵活协作空间,广泛应用在政府.医疗.教育.企业等各个行业.大家从文章8天扩容100万核,腾讯会议是如何做到的?都知道腾讯会议背后的计 ...
- 【小白学PyTorch】1 搭建一个超简单的网络
文章目录: 目录 1 任务 2 实现思路 3 实现过程 3.1 引入必要库 3.2 创建训练集 3.3 搭建网络 3.4 设置优化器 3.5 训练网络 3.6 测试 1 任务 首先说下我们要搭建的网络 ...
- 【转载】pandas常用函数
原文链接:https://www.cnblogs.com/rexyan/p/7975707.html 一.import语句 import pandas as pd import numpy as np ...
- unity3d中的Quaternion.LookRotation
android开发范例中的第二个粒子,是摇杆操作游戏,模式类似于“迷你高尔”,僵尸包围类型的设计游戏. 其中让我注意到这个函数的使用非常特别:Quaternion.LookRotation. 游戏针对 ...
- 【HttpRunner v3.x】笔记—8.用例引用、变量传递
看到这里,对于httprunner已经有了一个大概的了解,现在想对于一些比较重要或者常用的功能,进行一些实践操作. 毕竟那谁说过,"纸上得来终觉浅,绝知此事要躬行." 上一篇提到了 ...
- rpc之负载均衡
使用集群,比如zk来控制注册中心,当一个服务有多个请求地址的时候,会返回多个地址. 那么就需要负载均衡来控制我们要请求哪台机器来得到请求. 方案一:随机 传入key值和key所包含的ip地址值,该地址 ...
- 模拟CMOS集成电路 课后习题总结(2.1)
前几天开始自学拉扎维的模设教材,看之前浏览了EETOP论坛里面好多大神们对这本书的看法,当然也有人在抱怨,比如冒出“太科幻”.“一年才看完”之类恐怖的修饰语句,因此在开始看的时候就对此书充满了“敬畏” ...
- 网址中的静态资源 public
客户端浏览器收到的HTML响应内容中如果带有 link img script video audio 等带有src或者href标签时候,这些都是外部链接资源请求url.浏览器会默认自动性的对这些资源 ...