模板

注意:

  1. left <= right
  2. pivot = nums[mid]
  3. pivot 的位置会在while循环中变换, 不是原来的位置
  4. start + k - 1 <= right
    private int findKthElement(int[] nums, int start, int end, int k) {
        if (start == end) {
            return nums[start];
        }

        int i = start;
        int j = end;
        int pivot = nums[(start + end) / 2];

        while (i <= j) {
            while (i <= j && nums[i] < pivot) {
                i++;
            }
            while (i <= j && nums[j] > pivot) {
                j--;
            }

            if (i <= j) {
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
                i++;
                j--;
            }
        }

        if (start + k - 1 <= j) {
            return findKthElement(nums, start, j, k);
        }
        if (start + k - 1 >= i) {
            return findKthElement(nums, i, end, k - (i - start));
        }

        return nums[j + 1];
    }

results matching ""

    No results matching ""