Hiho : 二分·二分查找之k小数
2015-03-24 16:47
120 查看
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
提示:非有序数组的二分查找之二
第2行:N个整数,表示a[1..N],保证不会出现重复的数,1≤a[i]≤2,000,000,000。
样例输入
样例输出
通过效果:
单点时限:1000ms
内存限制:256MB
描述
在上一回里我们知道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 ; 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]; } } }
通过效果:
![](http://images.cnitblog.com/blog2015/684748/201503/241645566772331.png)
相关文章推荐
- hiho week 37 P1 : 二分·二分查找之k小数
- hihocoder1133 二分·二分查找之k小数
- hiho一下 第三十七周二分·二分查找之k小数
- 【HIHOCODER 1133】 二分·二分查找之k小数
- hiho 37 二分查找k小数
- hiho一下 第三十七周 题目1 : 二分·二分查找之k小数
- #1133 : 二分·二分查找之k小数(优先队列或SBT或排序)
- 九度OJ-题目1174:查找第K小数-10网研上机B
- hihocoder 第三十六周 二分·二分查找
- hihoCoder 二分·二分查找之k小数
- hiho一下 37 (无序二分·k小数)
- SQL:小数位保留(如果保留的数为0,自动查找下一位)
- hihoCoder 1133 二分·二分查找之k小数
- 【九度OJ】题目1174:查找第K小数 解题报告
- hihocoder#1133之非有序数组二分查找k小数
- #1133 : 二分·二分查找之k小数 ( 快速排序, 分治 OR nth_element() 函数)
- hiho 16 RQM_st(区间最值查找)
- 题目1174:查找第K小数
- 九度OJ 1174 查找第K小数 (STL)
- hiho #1014 : Trie树 (字典树的建立和查找)