LeetCode题解系列--215. Kth Largest Element in an Array
2017-09-18 10:30
561 查看
描述
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.
难度:medium
思路
这次所选择的是一道可以采用分治算法的题目,实际上是采用了课上老师所讲的算法。在数组中随机选一个数称为flag,然后将原数组分为三个部分,大于flag部分,小于flag部分,等于flag部分。然后通过这三个数组的大小,推断第k大的数属于哪个数组,进行递归调用。具体的如图:
整体来说算法还是比较简单,但是这个算法的时间复杂度呢?
从最坏情况考虑,是比较糟糕的,大概是O(n^2),不过实际做起来,这种情况发生的概率很低。
答案
#include <time.h> class Solution { public: int findKthLargest(vector<int>& nums, int k) { // get random number srand(time(NULL)); int index = rand() % nums.size(); int flag = nums[index]; vector<int> smaller, equal, bigger; // group into three number for (int i = 0; i < nums.size(); ++i) { if (nums[i] < flag) { smaller.push_back(nums[i]); } else if (nums[i] == flag) { equal.push_back(nums[i]); } else { bigger.push_back(nums[i]); } } if (bigger.size() >= k) { return findKthLargest(bigger, k); } else if (bigger.size() + equal.size() < k) { return findKthLargest(smaller, k - bigger.size() - equal.size()); } else { return flag; } } };
点击这里查看更多我的leetcode答案
相关文章推荐
- LeetCode题解(Week3):215. Kth Largest Element in an Array
- Leetcode题解 - 215. Kth Largest Element in an Array
- [leetcode] 215. Kth Largest Element in an Array 解题报告
- [leetcode]215. Kth Largest Element in an Array
- Leetcode215. Kth Largest Element in an Array
- 剑指offer 最小的k个数 leetcode 215. Kth Largest Element in an Array
- [LeetCode]215. Kth Largest Element in an Array
- Leetcode 215. Kth Largest Element in an Array
- LeetCode 215. Kth Largest Element in an Array
- 【leetcode】215. Kth Largest Element in an Array
- 【leetcode】215. Kth Largest Element in an Array
- LeetCode 215. Kth Largest Element in an Array
- LeetCode 215. Kth Largest Element in an Array
- leetcode 215. Kth Largest Element in an Array
- LeetCode 215. Kth Largest Element in an Array
- Leetcode:215. Kth Largest Element in an Array
- 【LeetCode】 215. Kth Largest Element in an Array
- Leetcode 215. Kth Largest Element in an Array
- [leetcode]215. Kth Largest Element in an Array@Java解题报告
- Leetcode问题解答:215. Kth Largest Element in an Array