O(n)复杂度求区间第K大

描述

给你一个数组,O(N)复杂度找出其中第K大的数.

输入
第一行包括两个数,N,K,分别代表数组大小,以及你应该找出第K大的数.
接下来N行,每行包括一个数.

输出
输出第K大的数.

下附AC代码

#include <stdio.h>
int a[1000000],b[1000000],c[1000000];
void seek(int a[],int b[],int c[],int k,int n){int i=0,j=n;int temp=a[i],count=0,d=0,e=0;for(int i=0;i<n;i++){if(a[i]==temp)count++;else if(a[i]>temp)b[d++]=a[i];else c[e++]=a[i];}if(k>d&&k<=d+count){printf("%d",temp);return;}else if(d>=k)seek(b,a,c,k,d);else seek(c,a,b,k-count-d,e);
}
int main() {int n,k;scanf("%d%d",&n,&k);for(int i=0;i<n;i++){scanf("%d",&a[i]);}seek(a,b,c,k,n);return 0;
}

问题本身不难,主要考虑随机设一个数然后把比它小的放左边,比它大的放右边,每次都能排除一定比例的元素,根据等比数列求和可知该算法为O(n)复杂度,应该可以说是平均下来最快的代码了。
PS:题目可能卡读入,用cin输入如果没有关同步的话会输入很慢,所以简单起见用scanf就好了。

O(n)复杂度求区间第K大相关推荐

  1. 整体二分求区间第k大模板(POJ 2104)

    自己的模板,线段树实现的,可以参考一下 算法步骤 参考一下文章 http://www.cnblogs.com/dirge/articles/5810855.html https://www.cnblo ...

  2. hdu2852(2009多校第四场) 树状数组求区间第k大的数 两种方法

    二分查找n*logn*logn 比较容易理解 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm& ...

  3. HDU2665 求区间第K大 主席树

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2665 代码: //#include<bits/stdc++.h> #include< ...

  4. Greedy Sequence(2019南京icpc网络预选赛)主席树求区间小于k的最大值

    题意:给出n个整数,构造s1,s2,s3-sn s1,s2,s3-sns1,s2,s3-sn,si sisi满足五个条件 1.s1[i]=i s1[i]=is1[i]=i 2.对于1<j< ...

  5. zoj 2112 树状数组 套主席树 动态求区间 第k个数

    总算是把动态求区间第k个数的算法看明白了. 在主席树的基础上,如果有修改操作,则要通过套树状数组来实现任意区间求第k小的问题. 刚开始看不明白什么意思,现在有一点理解.树状数组的每个元素是一个线段树, ...

  6. hdu 5919--Sequence II(主席树--求区间不同数个数+区间第k大)

    题目链接 Problem Description Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2 ...

  7. c++求区间第k大数_数组中求第K大数的实现方法

    问题:有一个大小为n的数组A[0,1,2,-,n-1],求其中第k大的数. 该问题是一个经典的问题,在<算法导论>中被作为单独的一节提出,而且其解决方法很好的利用了分治的思想,将时间复杂度 ...

  8. Dynamic Rankings——带修改区间第k大

    三种做法: 1.整体二分: 二分mid 考虑小于mid的修改的影响 但是大于mid的修改可能会干掉小于mid的一些值 所以额外把一个修改变成一个值的删除和一个值的添加 这样就相互独立了! 整体二分,树 ...

  9. poj2104(区间第k大+离散化)

    题意: 给定一个序列,求[a,b]区间第k大的数字. 思路: 主席树模板题,但是注意数据范围,需要离散化. 代码: #include<cstdio> #include<cstring ...

最新文章

  1. php禁止网页抓取,服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站 - 龙笑天下...
  2. 洛谷 P2197 nim游戏
  3. 命令行 笔记本键盘禁用_宏碁发布Enduro系列三防笔记本电脑和平板电脑
  4. 详解Spring框架的依赖注入
  5. 如何将外部的obj模型导入OpenGL
  6. 数据交互什么意思_学习编程怎么样才可以不枯燥?什么是前端语言?
  7. vue组件弹出框点击显示隐藏
  8. C++学习(十三)(C语言部分)之 练习
  9. geotools读取shp数据的数据类型
  10. 登录注册判断+Mysql
  11. 推销计算机英语作文,2018年12月英语四级作文范文:卖电脑
  12. Python中字典(dict)和集合(set)区别与联系
  13. c++ 小游戏 NO6 跑酷游戏
  14. 西门子1200PLC和KTP700触摸屏控制西门子V90伺服电机例子程序
  15. 项目管理 软件版本号的命名格式和规则
  16. Day1.数据可视化-Python语法
  17. 基于Java+Swing实现中国象棋游戏
  18. phpfetion.php,php 飞信2012最新可用api 接口免费分享phpfetion_PHP教程
  19. httpPrinter--vue--打印
  20. 安卓桌面软件哪个好_有什么比较好的电脑便签软件,网上比较火的便签是哪个软件...

热门文章

  1. 企业微信本地开发小程序。
  2. P卡不安全了?还有什么卡可以绑PayPal / eBay扣费?
  3. Android 工具类 大全
  4. Device eth1 has different MAC address
  5. 亚马逊运营如何做好优化listing页面
  6. eclipse中字母大小写转换快捷键(备忘)
  7. RPC、SOA与微服务
  8. springboot ElasticSearch配置自定义转换器ElasticsearchCustomConversions
  9. Ubuntu20.04安装Freesurfer7.3.2记录
  10. STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出