LeetCode215. Kth Largest Element in an Array题解

问题描述:给定一个数组,和数组长度以内的K值,返回第K大的数.


image.png

刚开始我想到了冒泡排序,然后就用冒泡排序解了一下,代码如下:

class Solution {
    public int findKthLargest(int[] nums, int k) {
     for (int i = 0; i < nums.length-1; i++) {//外层循环控制排序趟数
            for (int j = 0; j < nums.length - 1 - i; j++) {//内层循环控制每一趟排序多少次

                if (nums[j] > nums[j + 1]) {
                    int temp = nums[j];
                    nums[j] = nums[j + 1];
                    nums[j + 1] = temp;
                }
            }
        }
        return nums[nums.length-k];       
    }
}

具体冒泡排序思路可以参考:https://www.cnblogs.com/shen-hua/p/5422676.html
这个解法虽然可行,但是速度很慢,因为冒泡排序每排序一次,都会产生一个最大的数,所以我根据问题,对这个冒泡排序修改了一下,我们需要的是第k大的数,所以我们只需要排序K次就可以得到第K大的数,修改之后,运行时间缩短了一半,代码如下:

class Solution {
    public int findKthLargest(int[] nums, int k) {
     for (int i = 0; i < k; i++) {
            for (int j = 0; j < nums.length - 1 - i; j++) {
                if (nums[j] > nums[j + 1]) {
                    int temp = nums[j];
                    nums[j] = nums[j + 1];
                    nums[j + 1] = temp;
                }
            }
        }
        return nums[nums.length-k];
        
    }
}

你可能感兴趣的:(LeetCode215. Kth Largest Element in an Array题解)