LeetCode215. Kth Largest Element in an Array(Medium)
来源:互联网 发布:玩转财务大数据 编辑:程序博客网 时间:2024/05/17 06:34
原题地址:https://leetcode.com/problems/kth-largest-element-in-an-array/description/
题目:
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大的数,解题思路就是用分治法, 做法和书上例题几乎完全一样。将原vector对象nums分成Sl,Sv和Sr。
随机选择一个数v做参考(此处我选择nums[0]),比v大的压入Sl,相等的压入Sv,小的压入Sr。再通过判断各个vector的长度和k的大小比较,选择返回的变量。
如果k <= Sl.size(), 返回 findKthLargest(Sl, k)。
如果Sl.size() < k <= Sl.size()+Sv.size(), 返回v.
如果k > Sl.size()+Sv.size(), 返回findKthLargest(Sr, k- Sl.size()-Sv.size())。
解题思路并不麻烦,但是在judging的过程中,总是提示Memory Limit Exceeded后来发现是因为创建了vector对象却没有在离开作用域时将其清空。然后就是用vector().swap(),将用不到的vector对象释放。但是仍然出现该问题。后来发现题目要求的只是返回第k大的那一个数,所以在每次调用findKthLargest(nums, k)函数时,在分配完三个vector对象后,将nums释放,最后验证没有超出内存限制。
class Solution {public: int findKthLargest(vector<int>& nums, int k) { vector<int> Sl, Sv, Sr; //将原vector分成三份,按从大到小顺序从左到右排序 int v = nums[0]; //随机选择参照数v for (int i = 0; i < nums.size(); i++) { if (nums[i] > v) Sl.push_back(nums[i]); if (nums[i] == v) Sv.push_back(nums[i]); if (nums[i] < v) Sr.push_back(nums[i]); } vector<int>().swap(nums); //分配完成后释放nums int sizeL = Sl.size(), sizeV = Sv.size(); //因为后面可能要用到Sl和Sv的大小,且 //需要释放Sl和Sv,因此提前记录好他们大小 if (k <= Sl.size()) { vector<int>().swap(Sr); vector<int>().swap(Sv); return findKthLargest(Sl, k); } if (Sl.size() < k&&k <= Sl.size() + Sv.size()) { vector<int>().swap(Sr); vector<int>().swap(Sl); vector<int>().swap(Sv); return v; } if (k > Sl.size() + Sv.size()) { vector<int>().swap(Sv); vector<int>().swap(Sl); return findKthLargest(Sr, k - sizeL - sizeV); } }};
31 / 31 test cases passed.
Status: Accepted
Runtime: 149 ms
- LeetCode215. Kth Largest Element in an Array(Medium)
- LeetCode215:Kth Largest Element in an Array
- LeetCode215. Kth Largest Element in an Array
- Leetcode215: Kth Largest Element in an Array
- Leetcode215. Kth Largest Element in an Array
- leetcode215. Kth Largest Element in an Array
- LeetCode215. Kth Largest Element in an Array分治法
- LeetCode 215. Kth Largest Element in an Array(Medium)
- 215. Kth Largest Element in an Array (Medium)
- [Leetcode 215, Medium] Kth Largest Element in an Array
- Leetcode 215. Kth Largest Element in an Array (Medium) (cpp)
- Kth Largest Element in an Array——Difficulty:Medium
- (Leetcode)215.Kth Largest Element in an Array(medium)
- 【LeetCode】215. Kth Largest Element in an Array (Medium)
- Leetcode 215. Kth Largest Element in an Array[medium]
- Medium 215题 Kth Largest Element in an Array
- 215[Medium]:Kth Largest Element in an Array
- LeetCode 215. Kth Largest Element in an Array (Medium)
- df命令和挂载相关
- 如何更为高效的时间管理探索&&二零一六至二零七的总结
- centos6 安装tomcat
- POJ1231 max sum sequences DP
- 基于js对象,操作属性、方法详解
- LeetCode215. Kth Largest Element in an Array(Medium)
- 解决一些基础的html编写问题
- 树莓派kali linux安装mariadb
- windows控制虚拟机linux
- JS——计时器
- html如何让table表格垂直(上下)居中
- Javascript异步编程(一: 基础用法)
- 【Leetcode】【python】Combination Sum
- SpringMvc基础入门使用