leetcode Kth Largest Element in an Array
2017-10-07 20:19
344 查看
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.
解题方法:
使用分治算法,每次取数组最中间的数,比它小的放在它左边,比它大的放在它右边。如果右k小于右边数组的大小,则在在右边寻找第k大的数。如果k大于右边数组的大小,并且k小于或等于与它相等的数组的大小和右边数组大小之和,则第k大的数就是这个数。如果k大于与它相等的数组的大小和右边数组大小之和,则在左边数组寻找第(k-与它相等的数组的大小-右边数组的大小)大的数。这是分治算法的经典例子。注意每次可以随机取数组中的数,或者是取数组中间的数,如果取数组第一个数或者是最后一个数,容易出现极端情况。
详细代码:
class Solution {public:
int findKthLargest(vector<int>& nums, int k) {
return select(nums, k);
}
int select(vector<int>& array, int k) {
if (array.size() > 0) {
int com = array[array.size()/2];
vector<int> left;
vector<int> right;
for (vector<int>::iterator iter = array.begin(); iter != array.end(); ++iter) {
if (*iter > com) {
right.push_back(*iter);
iter = array.erase(iter);
--iter;
} else if (*iter < com) {
left.push_back(*iter);
iter = array.erase(iter);
--iter;
}
}
if (k <= right.size()) {
return select(right, k);
} else if (k <= (right.size() + array.size()) && k > right.size()) {
return array[0];
} else if (k > (right.size()+array.size())) {
return select(left, k-right.
8d0c
size()-array.size());
}
} else {
return 0;
}
}
};
复杂度分析:
T(n)= T(n/2)+ O(n) 为nlogn代码中需要注意的问题:
vector中erase一个元素,它的iiterate指向的是下一个元素的iterate,所以删除完之后,要--iter。相关文章推荐
- [leetcode]解决Kth Largest Element in an Array的一点小心得
- leetcode-215 Kth Largest Element in an Array
- Leetcode Kth Largest Element in an Array
- [Leetcode] Kth largest element in an array
- [leetcode]Kth Largest Element in an Array
- LeetCode@Array_215_Kth_Largest_Element_in_an_Array
- LeetCode|Kth Largest Element in an Array
- Leetcode: Kth Largest Element in an Array
- [LeetCode]Kth Largest Element in an Array
- 20170301-leetcode-215-Kth Largest Element in an Array
- Kth Largest Element in an Array(leetcode)
- LeetCode Kth Largest Element in an Array
- LeetCode -- Kth Largest Element in an Array
- LeetCode 215:Kth Largest Element in an Array
- LeetCode:Kth Largest Element in an Array
- leetcode Kth Largest Element in an Array
- leetcode 215 Kth Largest Element in an Array C++
- LeetCode:Kth Largest Element in an Array
- Leetcode114: Kth Largest Element in an Array
- #leetcode#Kth Largest Element in an Array