# LeetCode215: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 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.

Hide Tags Divide and Conquer Heap

# 解法一：使用最小堆

runtime:8ms

    int findKthLargest(vector<int>& nums, int k) {
make_heap(nums.begin(),nums.begin()+k,greater<int>());
for(int i=k;i<nums.size();i++)
{
int top=nums.front();
if(nums[i]>top)
{
pop_heap(nums.begin(),nums.begin()+k,greater<int>());
nums[k-1]=nums[i];
push_heap(nums.begin(),nums.begin()+k,greater<int>());
}
}
return nums.front();
}

# 解法二：使用最大堆

runtime:8ms

    int findKthLargest(vector<int>& nums, int k) {
make_heap(nums.begin(), nums.end());
for (int i=1; i<k; i++){
pop_heap(nums.begin(), nums.end());
nums.pop_back();
}
return nums[0];
}

# 解法三：分治法

1. 小于关键元素pivot的元素
2. 等于关键元素pivot的元素
3. 大于关键元素pivot的元素

1. 初始化left为0，right为nums.size()-1
2. 分割数组，如果pivot在第k-1位，返回pivot
3. 如果pivot在k-1右边，更新right为pivot的位置值
4. 否则更新left为pivot的位置值。
5. 重复2的步骤

runtime:8ms

     int findKthLargest(vector<int>& nums, int k) {
int pivot=nums[0];
int left=0;
int right=nums.size()-1;
while(true)
{
int pos=partion(nums,left,right);
if(pos==k-1)   return nums[pos];
if(pos<k-1)   left=pos+1;
else right=pos-1;
}

}

int partion(vector<int> &nums,int begin,int end)
{
int left=begin+1;
int right=end;
while(left<=right)
{
if(nums[left]<nums[begin]&&nums[right]>nums[begin])
swap(nums[left],nums[right]);
if(nums[left]>=nums[begin]) left++;
if(nums[right]<=nums[begin]) right--;
}
swap(nums[begin],nums[right]);
return right;
}
• 本文已收录于以下专栏：
• LeetCode

## [LeetCode 215]Kth Largest Element in an Array （分治法/快速排序）

215. Kth Largest Element in an ArrayFind the kth largest element in an unsorted array. Note that it ...
• zlasd
• 2016年09月14日 21:07
• 317

## leetcode 215: Kth Largest Element in an Array

leetcode 215: Kth Largest Element in an Array
• xudli
• 2015年05月29日 08:47
• 10622

## 215. Kth Largest Element in an Array-Python

• daigualu
• 2017年07月07日 17:42
• 548

## 【LeetCode-面试算法经典-Java实现】【215-Kth Largest Element in an Array（数组中第K大的数）】

【215-Kth Largest Element in an Array（数组中第K大的数）】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github...
• DERRANTCM
• 2015年08月28日 06:57
• 4307

## Leetcode 215. Kth Largest Element in an Array

/** * How quick sort works. * First choose a pivot, say the first element of the array, * set two...
• u011094114
• 2017年01月22日 05:54
• 71

## 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...
• sunao2002002
• 2015年05月27日 00:11
• 3220

## [leetcode] 215. Kth Largest Element in an Array 解题报告

• qq508618087
• 2016年02月21日 07:29
• 1066

## leetcode 215 Kth Largest Element in an Array C++

• a2331046
• 2016年12月05日 15:54
• 314

## [LeetCode]215 数组第k大的数

Kth Largest Element in an Array(数组第k大的数)【难度：Medium】 Find the kth largest element in an unsorted arr...
• qq_14821023
• 2016年03月04日 00:18
• 2023

## LeetCode215: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...
• u012501459
• 2015年07月09日 21:36
• 943

举报原因： 您举报文章：LeetCode215:Kth Largest Element in an Array 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)