Description
现有n个正整数,n≤10000,要求出这n个正整数中的第k个最小整数(相同大小的整数只计算一次),k≤1000,正整数均小于30000。
Input
包含多组测试数据,每组测试数据第一行为n和k,第二行开始为n个正整数的值,整数间用空格隔开。
Output
第k个最小整数的值;若无解,则输出“NO RESULT”。
Sample Input
10 3
1 3 3 7 2 5 1 2 4 6
Sample Output
3
解决:还是数组的巧妙利用,如果还不会可以看看前两篇,具体代码如下:
import java.util.Scanner;
public class homework {
public static void Kmin(){
int Kmin[]=new int[30001];
int k=0;
Scanner sc=new Scanner(System.in);
System.out.println("input:");
int n=sc.nextInt();
int key=sc.nextInt();
for(int i=0;i<n;i++){
int temp=sc.nextInt();
if(Kmin[temp]==0)
Kmin[temp]=1;
}
for(int i=1;i<30001;i++){ //找到第K小的整数
if(Kmin[i]!=0){
k++;
if(k==key){
System.out.println(i);
}
}
}
}
public static void main(String[] args){
Kmin();
}
}
结果截图
大杂烩的前三篇都是利用了·数组的特性,数组的下标表示元素的值,数组里存放的是有特殊含义的数组,第一篇存放的是数字出现的次数,达到去重的效果,第二篇存放的还是数字出现的次数,达到查找出现次数最多的目的,这一篇也一样。三篇都充分利用了数组是一片连续有序的空间这一特性,所以要多用这种特性来解决问题,但切记不可在需要空间过大的问题里使用,这终归是一种空间换时间的做法,故此道虽好但损内存。
加油哦!