您的位置:首页 > 其它

[LeetCode]Kth Largest Element in an Array

2015-07-29 23:24 531 查看
解题思路:

1,借用快排分治的思想;
2,递归函数中,每次随机选取一个数作为标的mark;
3,把 比mark大的存入一个数组larger,比mark小的存入另外一个数组smaller
4,结束条件就是,所找的第k大的数, k == larger.size() + 1

// C++ 实现
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
return find(nums, k);
}

int find(vector<int>& nums, int k){
int n = nums.size();
vector<int> smaller;
vector<int> larger;
int inx = rand()%n;

for (auto elem: nums){
if (elem > nums[inx]){
larger.push_back(elem);
}else if (elem < nums[inx]){
smaller.push_back(elem);
}
}
int sizeA = smaller.size();
int sizeB = larger.size();
if (sizeB < k && (n - sizeA) >= k){
return nums[inx];
}else{
if (sizeB >= k){
return find(larger, k);
}else if (n - sizeA < k){
return find(smaller, k-(n-sizeA));
}
}
}
};


# python 实现
import random
class Solution:
# @param {integer[]} nums
# @param {integer} k
# @return {integer}
def find(self, nums, n, k):

inx = int(random.random()*n)
a = [ i for i in nums if i < nums[inx]]
smaller = len(a)
b = [ i for i in nums if i > nums[inx]]
larger = len(b)

if smaller < k and n - larger >= k:
return nums[inx]
else:
if smaller >= k:
return self.find(a, smaller, k)
elif n - larger < k:
return self.find(b, larger, k - (n-larger))

def findKthLargest(self, nums, k):

return self.find(nums, len(nums), len(nums)- k + 1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: