0
点赞
收藏
分享

微信扫一扫

剑指 Offer II 076. 数组中的第 k 大的数字

三次方 2021-09-21 阅读 22
今日算法
题目描述:
示例 1:
示例 2:
题目分析:
  • 求第k个最大的元素,而不是第 k 个不同的元素。例如数组[5,3,3,2,1]中,第二大,第三大的元素都是3
思路一:
代码实现:
class Solution {
   
    public int findKthLargest(int[] nums, int num) {
      Arrays.sort(nums); // 突然忘记倒序的写法了。。。所以用了len - k.
      int len = nums.length;
      return nums[len - num];
    }
}
思路二:
代码实现:
class Solution {
    public int result = 0;
    public int k = 0;
    public int findKthLargest(int[] nums, int num) {
        k = num;
        quickSort(nums, 0, nums.length - 1);
        return result;
    }
    public void quickSort(int[] arr, int start, int end) {

        int pivot = arr[start];
        int left = start;
        int right = end;
        while (left < right) {
            while (left < right && pivot > arr[right]) {
                right--;
            }
            while (left < right && pivot <= arr[left]) {
                left++;
            }
            if (left < right) {
                int temp = arr[left];
                arr[left] = arr[right];
                arr[right] = temp;
            }
        }
        arr[start] = arr[left];
        arr[left] = pivot;
        if (left == (k - 1)) {
            result = arr[left];
        }
        // 判断第k大的数是否在基准数的左边.
        if (left > (k - 1)) {
            quickSort(arr, start, left - 1);
        }
        // 判断第k大的数是否在基准数的右边.
        if (left < (k - 1)) {
            quickSort(arr, left + 1, end);
        }
    }
}
举报

相关推荐

0 条评论