一、题目内容

image.png

二、题解

解法1:

思路

代码

  1. public class Solution {
  2. public int findKth(int[] a, int n, int K) {
  3. //边界条件
  4. return quickFind(a, 0, n - 1, K);
  5. }
  6. private int quickFind(int[] a, int left, int right, int k) {
  7. int p = partition(a,left,right);
  8. if (p == k - 1) {
  9. return a[p];
  10. } else if (p > k - 1) {
  11. return quickFind(a, left, p-1, k);
  12. } else {
  13. return quickFind(a, p+1,right, k);
  14. }
  15. }
  16. private int partition(int[] a, int left, int right){
  17. int target = a[left];
  18. while (left < right) {
  19. while (left < right && a[right] <= target) {
  20. right--;
  21. }
  22. if (left < right) {
  23. a[left] = a[right];
  24. left++;
  25. }
  26. while (left < right && a[left] > target) {
  27. left++;
  28. }
  29. if (left < right) {
  30. a[right] = a[left];
  31. right--;
  32. }
  33. }
  34. a[left] = target;
  35. return left;
  36. }
  37. }