题目链接:https://leetcode.com/problems/kth-largest-element-in-an-array/

215. Kth Largest Element in an Array

My Submissions

Question
Total Accepted: 43442 Total
Submissions: 136063 Difficulty: Medium

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.

For example,

Given [3,2,1,5,6,4] and k = 2, return 5.

Note: 

You may assume k is always valid, 1 ≤ k ≤ array's length.

Credits:

Special thanks to @mithmatt for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

Show Tags
Show Similar Problems
Have you met this question in a real interview?

Yes
No

Discuss

求给定数组的第K大的元素。

假设先排序,然后取第K个元素,那么时间复杂度是O(n*log n)。

借助堆的数据结构,能够把时间复杂度降到O(n*logk)。

假设求第K大的元素,那么要构建的是小顶堆。

求第K小的元素。那么要构建大顶堆!先构建k个元素的堆。另外i-k个元素逐个跟堆顶元素比較。假设比堆顶元素小,那么就将该元素纳入堆中,并保持堆的性质。

我的AC代码

public class KthLargestElementinanArray {

	public static void main(String[] args) {
int[] a = { 3, 2, 1, 5, 6, 4 };
System.out.println(findKthLargest(a, 1));
int[] b = { -1,2,0};
System.out.println(findKthLargest(b, 3));
int[] c = { 3,1,2,4};
System.out.println(findKthLargest(c, 2)); } public static int findKthLargest(int[] nums, int k) {
int[] heap = new int[k]; heap[0] = nums[0];
for (int i = 1; i < k; i++) {
siftUp(nums[i], heap, i);
} for (int i = k; i < nums.length; i++) {
siftDown(nums, k, heap, i);
} return heap[0];
} private static void siftDown(int[] nums, int k, int[] heap, int i) {
if (nums[i] > heap[0]) {
heap[0] = nums[i];
int p = 0;
while(p < k) {
int minChild = 2 * p + 1;
if(minChild + 1 < k && heap[minChild] > heap[minChild + 1]) minChild ++;
if(minChild < k && heap[p] > heap[minChild]) {
swap(heap, p, minChild);
p = minChild;
} else break;
}
}
} private static void siftUp(int num, int[] heap, int i) {
int p = i;
heap[i] = num;
while (p != 0) {
int parent = (p - 1) / 2;
if (heap[parent] > heap[p]) {
swap(heap, p, parent);
}
p = parent;
}
} private static void swap(int[] heap, int p, int parent) {
int temp = heap[parent];
heap[parent] = heap[p];
heap[p] = temp;
}
}

LeetCode OJ 215. Kth Largest Element in an Array 堆排序求解的更多相关文章

  1. LeetCode OJ 215. Kth Largest Element in an Array

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  2. 【LeetCode】215. Kth Largest Element in an Array (2 solutions)

    Kth Largest Element in an Array Find the kth largest element in an unsorted array. Note that it is t ...

  3. 【刷题-LeetCode】215. Kth Largest Element in an Array

    Kth Largest Element in an Array Find the kth largest element in an unsorted array. Note that it is t ...

  4. 【LeetCode】215. Kth Largest Element in an Array 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:移除最大值 方法二:排序 方法三:大顶堆 方 ...

  5. 【leetcode】215. Kth Largest Element in an Array

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  6. 网易2016 实习研发工程师 [编程题]寻找第K大 and leetcode 215. Kth Largest Element in an Array

    传送门 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 测试样例: [1,3,5, ...

  7. 剑指offer 最小的k个数 、 leetcode 215. Kth Largest Element in an Array 、295. Find Median from Data Stream(剑指 数据流中位数)

    注意multiset的一个bug: multiset带一个参数的erase函数原型有两种.一是传递一个元素值,如上面例子代码中,这时候删除的是集合中所有值等于输入值的元素,并且返回删除的元素个数:另外 ...

  8. LN : leetcode 215 Kth Largest Element in an Array

    lc 215 Kth Largest Element in an Array 215 Kth Largest Element in an Array Find the kth largest elem ...

  9. leetcode面试准备:Kth Largest Element in an Array

    leetcode面试准备:Kth Largest Element in an Array 1 题目 Find the kth largest element in an unsorted array. ...

随机推荐

  1. oracle常见sql语句优化

    1.* 号引起的运行效率 尽量降低使用select * 来进行查询,当你查询使用*, 数据库会进行解析并将*转换为所有列. select count(si.student_id)  from Stud ...

  2. IOS开发教程--怎样使用点9图片

    事先准备一张图片: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA== ...

  3. wpf获取webbroswer的两个方法

    //跳转前的地址 private void WebBrowser_BeforeNavigate2(object pDisp, ref object URL, ref object Flags, ref ...

  4. 【C++】String类中的运算符重载

    模块化设计: 头文件: <span style="font-size:18px;"> #ifndef operator_operator_h #define opera ...

  5. 【1】按照Django官网,编写一个web app 创建project/配置数据库

    1. Creating a project From the command line, cd into a directory where you'd like to store your code ...

  6. 16. 3Sum Closest[M]最接近的三数之和

    题目 Given an array nums of n integers and an integer target, find three integers in nums such that th ...

  7. QT-helloworld-QtCreater编写

    前言:纯代码编写helloworld,解析代码含义. 一.新建空项目 新建->其他项目->Empty qmake Project 二.修改.pro文件 打开helloworld.pro文件 ...

  8. ROS-SLAM仿真-cartographer

    前言:cartographer是谷歌2016年发布的一个开源slam算法,采用基于图网络的优化方法,主要基于激光雷达来实现. 使用源码编译方式. 一.新建工作空间 1.1 使用roboware新建名为 ...

  9. SparkSQL 与 Spark Core的关系

    不多说,直接上干货! SparkSQL 与 Spark Core的关系 Spark SQL构建在Spark Core之上,专门用来处理结构化数据(不仅仅是SQL). Spark SQL在Spark C ...

  10. android studio开发去掉titlebar

    android:theme="@style/AppTheme"换成android:theme="@style/Theme.AppCompat.NoActionBar&qu ...