时间限制:10000ms
单点时限: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[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];
} } }

通过效果:

最新文章

  1. 不得不喷一下中控科技,ZKT,恶心的中控,售后技术和屎一样,半年不见人。
  2. xcopy /r /y &quot;$(TargetPath)&quot; &quot;$(ProjectDir)&quot;..\CMSAdmin\DLL\
  3. Redis小结
  4. java俄罗斯方块游戏代码
  5. [logstash-input-file]插件使用详解(转)
  6. 互联网4.0时代需要商业智能BI
  7. 【shell】多命令执行顺序
  8. (转)C#模拟键盘鼠标事件
  9. spring定时任务的配置使用
  10. hackerrank【Lego Blocks】:计数类dp
  11. Delphi线程同步
  12. Python之路第六天,基础(8)-反射
  13. CSS常用字体Unicode 编码
  14. JS框架设计读书笔记之-核心模块
  15. Android 实现高仿iOS桌面效果之可拖动的GridView(上)
  16. kettle表更新/插入更新
  17. 防止enter提交表单
  18. Python学习-字符编码浅析
  19. (转)tomcat 修改默认访问项目名称和项目发布路径
  20. 由于找不到 MSVCR100.dll,无法继续执行代码

热门文章

  1. Android 6.0 Marshmallow root 方法
  2. java===java基础学习(5)---文件读取,写入操作
  3. bzoj 1191 超级英雄Hero
  4. linux和性能相关的命令及系统性能诊断
  5. Log4Net中配置文件的解释
  6. Exchanger学习
  7. ES Java 客户端
  8. AtomicReference 和 volatile 的区别
  9. css 三(清除浮动专题)
  10. 通过IP地址和子网掩码计算主机数