Hiho : 二分·二分查找之k小数
描述
在上一回里我们知道Nettle在玩《艦これ》,Nettle的镇守府有很多船位,但船位再多也是有限的。Nettle通过捞船又出了一艘稀有的船,但是已有的N(1≤N≤1,000,000)个船位都已经有船了。所以Nettle不得不把其中一艘船拆掉来让位给新的船。Nettle思考了很久,决定随机选择一个k,然后拆掉稀有度第k小的船。 已知每一艘船都有自己的稀有度,Nettle现在把所有船的稀有度值告诉你,希望你能帮他找出目标船。
输入
第1行:2个整数N,k。N表示数组长度,
第2行:N个整数,表示a[1..N],保证不会出现重复的数,1≤a[i]≤2,000,000,000。
输出
第1行:一个整数t,表示t在数组中是第k小的数,若K不在数组中,输出-1。
- 样例输入
- 
10 4 
 1732 4176 2602 6176 1303 6207 3125 1 1011 6600
- 样例输出
- 
1732 代码: import java.util.Arrays; 
 import java.util.Scanner; public class Main {
 public static void main(String [] argv){ Scanner in = new Scanner(System.in);
 int N = in.nextInt();
 int M = in.nextInt()-1;
 int [] s = new int[N];
 for (int i=0; i<N; i++){
 s[i]=in.nextInt();
 }
 in.close();
 if(M+1>N||M<0)
 System.out.println(-1);
 else
 KP(M,s); } static public void KP(int m, int [] h){
 int s[] =h;
 int k = s[0];
 int first = 0;
 int last = s.length-1;
 while(true){
 while(first<last){
 while(first<last&&s[last]>=k)
 --last;
 s[first]=s[last];
 while(first<last&&s[first]<=k)
 ++first;
 s[last]=s[first];
 if(first==last)
 s[first]=k;
 }
 for(int t = 0 ; t< s.length; t++){
 //System.out.print(s[t]);
 }
 //System.out.println("first:"+first+"m:"+m+"last:"+last);
 if(first<m){
 int[] temp = new int[s.length-1-first];
 for(int j = 0; j<s.length-1-first; j++){
 temp[j]=s[j+first+1];
 }
 s = temp;
 m = m-first-1;
 first = 0;
 last = s.length-1;
 }
 else{
 if(first==m){
 System.out.println(k);
 return ;
 } else{
 int[] temp = Arrays.copyOf(s, first);
 s=temp;
 first = 0;
 last = s.length-1;
 } }
 if(s.length>=1)
 k=s[0];
 } } }通过效果:  
Hiho : 二分·二分查找之k小数的更多相关文章
- hiho week 37 P1 : 二分·二分查找之k小数
		P1 : 二分·二分查找之k小数 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 在上一回里我们知道Nettle在玩&l ... 
- hihoCoder 1133 二分·二分查找之k小数(TOP K算法)
		#1133 : 二分·二分查找之k小数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很 ... 
- 查找第K小数
		题目描述 查找一个数组的第K小的数,注意同样大小算一样大. 如 2 1 3 4 5 2 第三小数为3. 输入描述: 输入有多组数据.每组输入n,然后输入n个整数(1<=n<=1000), ... 
- 【九度OJ】题目1174:查找第K小数 解题报告
		[九度OJ]题目1174:查找第K小数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1174 题目描述: 查找一个数组的第 ... 
- hiho一下 第三十七周 二分查找之k小数
		题目链接:http://hihocoder.com/contest/hiho37/problem/1 , 简单二分. 算法: 题目即为求一个无序数组数组中第k小的数,由于数据量太大,排序是会超时的. ... 
- 【HIHOCODER 1133】 二分·二分查找之k小数
		描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很多船位,但船位再多也是有限的.Nettle通过捞船又出了一艘稀有的船,但是已有的N(1≤N≤1,000,000) ... 
- 【hihoCoder】#1133 : 二分·二分查找之k小数
		题目描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很多船位,但船位再多也是有限的.Nettle通过捞船又出了一艘稀有的船,但是已有的N(1≤N≤1,000,00 ... 
- hihocoder1133 二分·二分查找之k小数
		思路: 类似于快排的分治算法. 实现: #include <iostream> #include <cstdio> #include <algorithm> #in ... 
- hihoCoder#1133 二分·二分查找之k小数
		原题地址 经典问题了,O(n)时间内找第k大的数 代码: #include <iostream> using namespace std; int N, K; int *a; int se ... 
随机推荐
- DIV+CSS综合实例【传智PHP首页】
			1.首页结构 2.准备工作 所有素材放到与当前网页同级的目录下: 网页背景色.背景图: 主页宽度:1000px: 创建CSS文件,将CSS文件引入到当前的HTML文件中. 3.实现 效果图: HTML ... 
- java===java基础学习(1)---数据类型,运算,变量,常量
			今天起开始了java的学习之路,主要学习了数据类型和运算,变量,常量.基本和python有很多相通的地方,所以看起来很容易上手.下面是学习笔记! package testbotoo; public c ... 
- 超级rtmp服务器和屌丝wowza
			超级rtmp服务器和屌丝wowza http://blog.csdn.net/win_lin/article/details/11927973 
- python windows下安装celery调度任务时出错
			由于celery 4.0不支持windows系统.所以用命令pip install Celery安装的celery是最新版4.0的不能在windows下运行. 在windows命令窗口运行: cele ... 
- api文档工具
			平台选型 Apidoc 文档参考:http://apidocjs.com 优点 文档齐全,操作简单,ui清晰,代码注解查询性强,语言支持多元化, ... 
- 2017多校第8场 HDU 6134 Battlestation Operational 莫比乌斯反演
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6134 题意: 解法: 那么g(n)怎么求,我们尝试打表发现g(n)是有规律的,g(n)=g(n-1)+ ... 
- java.util.ConcurrentModification并发修改异常
			在运行下面这段代码时出现了并发修改异常java.util.ConcurrentModification: public static void main(String[] args) { List l ... 
- ZK客户端
			说明:本文为读<从Paxos到Zookeeper 分布式一致性原理与实践>读书笔记 shell操作 Java客户端 原始API pom文件: <dependency> < ... 
- es6中对象的一些操坐
			变量的赋值 key值得构建 对象的严格检测 对象的合并 1.变量的赋值: let name='宋宇',age='17岁': let obj={name,age} //快速的将变量引入到对象中去. 2. ... 
- react native 生成APK
			参考地址:React native Android 命令 打包apk 首先:尝试使用模拟器测试 这里是因为需要确认目前在电脑上的模拟器是可以正常运行的,并且,开发React native的应用程序,肯 ... 
