No215. Kth Largest Element in an Array
来源:互联网 发布:知乎 暴戾 编辑:程序博客网 时间:2024/06/03 06:11
一、题目描述
Find the kth largest element in anunsorted 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.
二、方法一
写法最简单的方法,调用sort函数从小到大排序,再输出数组的第n-k位,该方法的时间复杂度是O(nlogn)。
class Solution {public: int findKthLargest(vector<int>& nums, int k) { sort(nums.begin(),nums.end()); return nums[nums.size()-k]; }};
三、方法二
对排序进行优化,分别用快排和堆排实现:
快排:
class Solution {public: int patition(vector<int>& nums,int left,int right){ int l=left+1,r=right; while(l<=r){ if(nums[l]<nums[left]&&nums[r]>nums[left]){ swap(nums[l],nums[r]); l++; r--; } if(nums[l]>=nums[left]) l++; if(nums[r]<=nums[left]) r--; } swap(nums[r],nums[left]); return r; } int findKthLargest(vector<int>& nums, int k) { int left=0,right=nums.size()-1; while(true){ int pos = patition(nums,left,right); if(pos==k-1) return nums[pos]; else if(pos>k-1) right=pos-1; else left=pos+1; } }};
堆排:
class Solution {public: void maxheap(vector<int>& nums,int index){ int large =index; int left = index*2+1,right=index*2+2; if(left<heapsize&&nums[large]<nums[left]) large=left; if(right<heapsize&&nums[large]<nums[right]) large=right; if(large!=index){ swap(nums[index],nums[large]); maxheap(nums,large); } } void buildheap(vector<int>& nums){ heapsize=nums.size(); for(int i=(heapsize/2-1);i>=0;i--) maxheap(nums,i); } int findKthLargest(vector<int>& nums, int k) { buildheap(nums); heapsize=nums.size(); for(int i=0;i<k;i++){ swap(nums[0],nums[heapsize-1]); heapsize--; maxheap(nums,0); } return nums[heapsize]; }private: int heapsize; };
阅读全文
0 0
- No215. Kth Largest Element in an Array
- leetcode No215. Kth Largest Element in an Array
- leetcode No215. Kth Largest Element in an Array
- Kth Largest Element in an Array
- Leetcode Kth Largest Element in an Array
- Kth Largest Element in an Array
- 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
- Kth Largest Element in an Array
- [leetcode] Kth Largest Element in an Array
- Kth Largest Element in an Array
- Kth Largest Element in an Array
- leetcode--Kth Largest Element in an Array
- Kth Largest Element in an Array
- 215.Kth Largest Element in an Array
- #leetcode#Kth Largest Element in an Array
- 【MyEclipse】设置作者信息等
- python学习笔记2
- maven项目 tomcat启动时报错遇到的坑
- hihocoder-1068-RMQ-ST算法模板
- tensorflow将CSV文件转为TFrecords文件
- No215. Kth Largest Element in an Array
- (搬运).net起步 (自定义 ASP.NET CreateUserWizard 控件2)
- 13 linux设备驱动基础
- 素材 图论-节点的度
- js实现数据绑定
- 欢迎使用CSDN-markdown编辑器
- Double类型两个数不能用双等号判断是否相等
- 查看linux版本
- LintCode堆栈题总结