博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode: Kth Largest Element in an Array
阅读量:5284 次
发布时间:2019-06-14

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

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.

The same with Lintcode:

快速选择 Quick Select

复杂度

时间 Avg O(N) Worst O(N^2) 空间 O(1)

One thing to notice is 23-24 line, still find kth smallest element, do not need to decrease from k because the indexing(编号) does not change

1 public class Solution { 2     public int findKthLargest(int[] nums, int k) { 3         int len = nums.length; 4         return findKthSmallest(nums, 0, len-1, len-k+1); 5     } 6      7     public int findKthSmallest(int[] nums, int start, int end, int k) { 8         int l = start; 9         int r = end;10         int pivot = end;11         while (l < r) {12             while (l
= nums[pivot]) {16 r--;17 }18 if (l == r) break;19 swap(nums, l, r);20 }21 swap(nums, l, pivot);22 if (l+1 == k) return nums[l];23 else if (l+1 < k) return findKthSmallest(nums, l+1, end, k);24 else return findKthSmallest(nums, start, l-1, k);25 }26 27 public void swap(int[] nums, int l, int r) {28 int temp = nums[l];29 nums[l] = nums[r];30 nums[r] = temp;31 }32 }

 

优先队列

复杂度

时间 O(NlogK) 空间 O(K)

思路

遍历数组时将数字加入优先队列(堆),一旦堆的大小大于k就将堆顶元素去除,确保堆的大小为k。遍历完后堆顶就是返回值。

1 public class Solution { 2     public int findKthLargest(int[] nums, int k) { 3         PriorityQueue
p = new PriorityQueue
(); 4 for(int i = 0 ; i < nums.length; i++){ 5 p.add(nums[i]); 6 if(p.size()>k) p.poll(); 7 } 8 return p.poll(); 9 }10 }

用最大堆也可以,把所有元素加进去后,poll K次

转载于:https://www.cnblogs.com/EdwardLiu/p/5052893.html

你可能感兴趣的文章
MauiMETA工具的使用(一)
查看>>
LeetCode: Anagrams 解题报告
查看>>
Qt 中获取本机IP地址
查看>>
070102_赌博设计:概率的基本概念,古典概型
查看>>
IT人生的价值和意义 感觉真的有了
查看>>
JS DOM对象
查看>>
OGR – Merging Multiple SHP files
查看>>
创业公司该不该被收购?(转)
查看>>
sqlserver 行转列、列转行[转]
查看>>
【IScroll深入学习】解决IScroll疑难杂症
查看>>
python 数据类型
查看>>
108-PHP类成员protected和private成员属性不能被查看数值
查看>>
css控制height充满浏览器视口
查看>>
Linux 系统目录结构
查看>>
python学习之 - XML
查看>>
css问题小计
查看>>
Laravel学习笔记(三)数据库 数据库迁移
查看>>
ORACLE查看并修改最大连接数
查看>>
box-flex不均分问题
查看>>
Python--GIL 详解
查看>>