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];
        
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这道题目是用排序做不出来的。很没含量。然后看了下 quick selection 算法。打算明天自己重写下。待补充...
    Richardo92阅读 793评论 1 1
  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 1,820评论 0 7
  • 只要有耐心,时间就是你的朋友 (一) 现在是晚上21点33分。其实每天到这个对于我来说是很焦虑的,其实绝大多数的文...
    米小哥阅读 918评论 0 0
  • 时间如流水,永不停息地奔流着,带走了我们多少欢乐的时光。那些欢乐的日子,一去不复返了。 记得那是一节音乐课,老师让...
    EEEEElectric阅读 347评论 1 0
  • “所以说…你在那个世界里轮回了无数次,还把所有的基础资料都背好了,还成功引导出火苗和制作出一个傀儡玩具?” 大姐头...
    诸葛皮皮虾阅读 192评论 0 0