215. 数组中的第K个最大元素。在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
发布日期:2021-10-06 02:38:40 浏览次数:3 分类:技术文章

本文共 1158 字,大约阅读时间需要 3 分钟。

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例 1:

输入: [3,2,1,5,6,4] 和 k = 2输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4

说明:

你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

  • 方法一:Arrays,自带排序方法

class Solution {

    public int findKthLargest(int[] nums, int k) {

        Arrays.sort(nums);

        

        for(int i = nums.length-1,j=1; i>=0; i--,j++){

            if(j == k)

                return nums[i];

        }

        return -1;

    }

}

  • 方法二:快速排序

class Solution {

    Random random = new Random();

 

    public int findKthLargest(int[] nums, int k) {

        return quickSelect(nums, 0, nums.length - 1, nums.length - k);

    }

 

    public int quickSelect(int[] a, int l, int r, int index) {

        int q = randomPartition(a, l, r);

        if (q == index) {

            return a[q];

        } else {

            return q < index ? quickSelect(a, q + 1, r, index) : quickSelect(a, l, q - 1, index);

        }

    }

 

    public int randomPartition(int[] a, int l, int r) {

        int i = random.nextInt(r - l + 1) + l;

        swap(a, i, r);

        return partition(a, l, r);

    }

 

    public int partition(int[] a, int l, int r) { 

        int x = a[r], i = l - 1;

        for (int j = l; j < r; ++j) {

            if (a[j] <= x) {

                swap(a, ++i, j);

            }

        }

        swap(a, i + 1, r);

        return i + 1;

        }

 

    public void swap(int[] a, int i, int j) {

        int temp = a[i];

        a[i] = a[j];

        a[j] = temp;

    }

}

 

转载地址:https://blog.csdn.net/luxuiary/article/details/107017850 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【面试题】高级Java 面试知识点总结
下一篇:【微服务-Spring源码】Idea + Gradle + Spring源码环境搭建

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月17日 19时35分07秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Flink在美团的应用与实践听课笔记 2019-04-27
Java多线程的11种创建方式以及纠正网上流传很久的一个谬误 2019-04-27
JDK源码研究Jstack,JMap,threaddump,dumpheap的原理 2019-04-27
Java使用字节码和汇编语言同步分析volatile,synchronized的底层实现 2019-04-27
javac编译原理和javac命令行的使用 2019-04-27
Unity使用UnityWebRequest实现本地日志上传到web服务器 2019-04-27
Unity使用RenderTexture实现裁切3D模型 2019-04-27
美术和程序吵架,原来是资源序列化格式设置不统一 2019-04-27
Unity iOS接SDK,定制UnityAppController 2019-04-27
Unity iOS接SDK前先要了解的知识(Objective-C) 2019-04-27
python遇到了‘module‘ object has no attribute ‘socket‘问题,大概率是这个原因 2019-04-27
记一次iOS闪退问题的定位:NSLog闪退 2019-04-27
Unity打开照相机与打开本地相册然后在Unity中显示照片(Android与iOS) 2019-04-27
无需接入SDK即可在Unity中获取经纬度(Android/iOS),告诉我你的坐标 2019-04-27
Unity获取系统信息SystemInfo(CPU、显卡、操作系统等信息) 2019-04-27
Unity中获取物体的尺寸(size)的三种方法 2019-04-27
Unity中的关节组件和绳子效果的实现 2019-04-27
Unity可视化编程插件: Bolt,可以像UE4的蓝图那样啦 2019-04-27
Android使用adb logcat时日志中文乱码问题,使用chcp 65001设置编码即可 2019-04-27
Android的.dex、.odex与.oat文件扫盲 2019-04-27