版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
题目:
求 n 个整数中第 k(1≤k≤n) 大的整数。
输入格式
n 和 k
n 个整数
输出格式
第 k 大的整数
输入样例
10 3
2 5 -1 9 25 0 12 4 -7 12
输出样例
12
思路:
题目没有给出明确的数据量(数据大小和范围),这道题我没提交测试,所以只知道样例对了,但为了防止超时,我用数组来代替排序,因为当数据量大时排序必然超时,所以直接不排序(用数组下标就代替了)。
注意:题意要求相同的数字有多个也得单独排列,所以减去每个数字的数量
eg:样例中前3大的为25,12,12,所以k=3时输出12
所以有count-=positive[i];这行代码
代码
import java.util.*;
public class 第k大的整数 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int k=in.nextInt();
int[] positive=new int[10000];//存放正数
int[] negative=new int[10000];//存放负数
for(int i=0;i<n;i++){
int num=in.nextInt();
//用数组代替排序
//有数就相应位置自加,没有的数数量为0
if(num>=0){
positive[num]++;
}
else{
negative[-num]++;
}
}
int count=k;
for(int i=positive.length-1;i>=0;i--){
if(positive[i]!=0){
//题意要求相同的数字有多个也得单独排列,所以减去每个数字的数量
//eg:样例中前3大的为25,12,12,所以k=3时输出12
count-=positive[i];
if(count==0){
System.out.println(i);//下标即代表相应的数字
break;
}
}
}
if(count>0){//第k大的数为负数
for(int i=1;i<negative.length;i++){
if(negative[i]!=0){
count--;
if(count==0){
System.out.println(-i);
break;
}
}
}
}
}
}