首页 > 试题广场 >

查找第K小数

[编程题]查找第K小数
  • 热度指数:19957 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
查找一个数组的第K小的数,注意同样大小算一样大。 如  2 1 3 4 5 2 第三小数为3。

输入描述:
输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000),再输入k。


输出描述:
输出第k小的整数。
示例1

输入

6
2 1 3 5 2 2
3

输出

3
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.TreeSet;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        TreeSet<Integer> ts = new TreeSet<>();
        int n = Integer.parseInt(br.readLine());
        String[] s = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            ts.add(Integer.parseInt(s[i]));
        }
        int k = Integer.parseInt(br.readLine());
        System.out.println(ts.toArray()[k-1]);
    }
}



发表于 2021-02-18 13:35:50 回复(0)
//使用hash
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int n=sc.nextInt();
			int []arr=new int[1000];
			for(int i=0;i<n;i++)
				arr[sc.nextInt()]++;
			int k=sc.nextInt();
			int cnt=0;
			for(int i=0;i<arr.length;i++) {
				if(arr[i]!=0)cnt++;
				if(cnt==k) {
					cnt=i;
					break;
				}
			}
			System.out.println(cnt);
		}
	}
}
			

发表于 2020-04-09 18:55:29 回复(0)
Java 解法, 使用TreeSet
import java.util.ArrayList;
import java.util.Scanner;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        TreeSet<Integer> set = new TreeSet<>();
        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) set.add(scanner.nextInt());
        ArrayList<Integer> list = new ArrayList<>(set);
        int k = scanner.nextInt();
        System.out.println(list.get(k-1));
    }
}


发表于 2020-03-18 13:02:29 回复(0)
import java.util.Arrays;
import java.util.Scanner;

public class Main{
	
	public static void main(String[] args)  {
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()) {
			int n = scanner.nextInt();
			int[] nums = new int[n];
			for(int i = 0; i < n; i++) {
				nums[i] = scanner.nextInt();
			}
			int min = scanner.nextInt();
			Arrays.sort(nums);
			for(int i = 1; i < nums.length; i++) {
				if(nums[i] == nums[i - 1]) continue;
				min--;
				if(min == 1) {
					System.out.println(nums[i]);
					return;
				}
			}
		}
	}
}

发表于 2020-03-08 20:48:40 回复(0)
 import java.util.*;
public class Main{
    
    private static void sort(int[] arr){
        int[] temp = new int[arr.length];
        sort(arr,0,arr.length-1,temp);
    }
    private static void merge(int[] arr,int left,int mid,int right,int[] temp){
        int leftP = left;
        int rightP = mid+1;
        int tempP = 0;
        while(leftP<=mid&&rightP<=right){
            if(arr[leftP]<=arr[rightP]){
                temp[tempP++] = arr[leftP++];
            }
            else temp[tempP++] = arr[rightP++];
            
        }
        while(leftP<=mid){
            temp[tempP++] = arr[leftP++];
        }
        while(rightP<=right){
            temp[tempP++] = arr[rightP++];
        }
        tempP = 0;
        while(left<=right){
            arr[left++] = temp[tempP++];
        }
    }
    private static void sort(int[] arr,int left,int right,int[] temp){
        if(left<right){
            int mid = (left+right)/2;
            sort(arr,left,mid,temp);
            sort(arr,mid+1,right,temp);
            merge(arr,left,mid,right,temp);
        }
    }
    
    
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] arr = new int[n];
        for(int i =0;i<n;i++){
            arr[i] = scanner.nextInt();
        }
        sort(arr);
        int k = scanner.nextInt();
        int answerP = 1;
        int number;
        int preNumber = arr[0];
        for(int i = 0;i<arr.length;i++){
            number = arr[i];
            if(number!= preNumber){
                answerP++;
                preNumber = number;
                if(answerP==k){
                    System.out.println(number);
                    break;
                }
            }
        }
        
        
        
    }
}

发表于 2018-12-26 13:22:37 回复(0)

运行时间:44ms
占用内存:10932k
思路、注释,在代码里了。

import java.util.Arrays;
import java.util.Scanner;
/**
 * @author Allen_Hua
 * @create_time 创建时间:May 11, 2018 9:24:25 PM 类说明
 */
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            int n = scan.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = scan.nextInt();
            }
            int k = scan.nextInt();// 第k小的数
            // 从小到大排了序
            Arrays.sort(arr);
            // 遇到一种新的元素就加一 默认arr[0]是一种元素 temp初始化值为1
            int temp = 1;
            for (int i = 1; i < arr.length; i++) {
                // 如果该数和前面一个数一样 则continue 
                // 不会执行循环体内该句下面的代码
                if (arr[i] == arr[i - 1]) {
                    continue;
                } else {// 如果该数和前面一个数不一样 则遇到了新的数
                    temp++;
                }
                if (temp == k) {
                    System.out.println(arr[i]);
                }
            }
        }
    }
}
编辑于 2018-05-11 21:50:25 回复(1)
import java.util.Scanner;
import java.util.TreeSet;

/**
 * Created by fhqplzj on 17-2-19 at 下午5:08.
 */
public class Ex1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            TreeSet<Integer> treeSet = new TreeSet<>();
            int n = scanner.nextInt();
            for (int i = 0; i < n; i++) {
                treeSet.add(scanner.nextInt());
            }
            int k = scanner.nextInt();
            for (int i = 1; i < k; i++) {
                treeSet.pollFirst();
            }
            System.out.println(treeSet.first());
        }
    }
}
或者使用iterator:
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

/**
 * Created by fhqplzj on 17-2-19 at 下午5:08.
 */
public class Ex1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            TreeSet<Integer> treeSet = new TreeSet<>();
            int n = scanner.nextInt();
            for (int i = 0; i < n; i++) {
                treeSet.add(scanner.nextInt());
            }
            Iterator<Integer> iterator = treeSet.iterator();
            int k = scanner.nextInt();
            for (int i = 1; i < k; i++) {
                iterator.next();
            }
            System.out.println(iterator.next());
        }
    }
}

编辑于 2017-02-19 17:17:38 回复(0)

问题信息

难度:
7条回答 16195浏览

热门推荐

通过挑战的用户

查看代码