您的位置:首页 > 其它

[leetcode] Kth Largest Element in an Array

2015-06-03 02:22 381 查看
From : https://leetcode.com/problems/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.
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
if(nums.size()<k || k<=0) return 0;
multiset<int, less<int>> box;
multiset<int, less<int>>::iterator it;
for(int i=0; i<nums.size(); i++) {
if(i>=k) {
it = box.begin();
if(*it<nums[i]) {
box.erase(it);
box.insert(nums[i]);
}
} else box.insert(nums[i]);
}
return *box.begin();
}
};


public class Solution {
public int findKthLargest(int[] nums, int k) {
int len = nums.length, left=0, right = len-1, index=partation(nums, left, right);
while(len != index+k) {
if(index+k > len) {
right = index-1;
} else {
left = index+1;
}
index=partation(nums, left, right);
}
return nums[index];
}
private int partation(int[] nums, int left, int right) {
int pos = left, v = nums[pos];
while(left <= right) {
while(left<=right && nums[left]<=v) ++left;
while(left<=right && nums[right]>v) --right;
if(left < right) {
swap(nums, left, right);
}
}
swap(nums, pos, right);
return right;
}

void swap(int[] nums, int i, int j) {
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
}


public class Solution {
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
int len = nums.length;
for(int i=0; i < len && i < k; ++i) {
pq.add(nums[i]);
}
for(int i=k; i<len; ++i) {
if(pq.peek() < nums[i]) {
pq.poll();
pq.add(nums[i]);
}
}
return pq.peek();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: