Que02|AcWing 786. 第k个数

66 阅读1分钟
题目:786. 第k个数 - AcWing题库
思路/想法:

image.png

代码实现:
import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), k = sc.nextInt();
        int[] q = new int[n];
        for (int i = 0; i < n; i++) {
            q[i] = sc.nextInt();
        }
        int ans = quickSort(q, 0, n - 1, k);
        System.out.print(q[ans]);
    }
    public static int quickSort(int[] q, int l, int r, int k) {
        if (l >= r) return l;
        int x = q[(l + r) / 2], i = l - 1, j = r + 1;
        while (i < j) {
            while (q[++i] < x);
            while (q[--j] > x);
            if (i < j) {
                int t = q[i];
                q[i] = q[j];
                q[j] = t;
            }
        }
        int sl = j - l + 1;
        if (k <= sl) {
            return quickSort(q, l, j, k);
        } else {
            return quickSort(q, j + 1, r, (k - sl));
        }
    }
}