215. Kth Largest Element in an Array
来源:互联网 发布:苹果软件破解版 编辑:程序博客网 时间:2024/05/17 03:54
215. 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.
思路
利用快排的思想。选择数组中的一个数作为pivot,并对该pivot进行第一趟排序。第一趟排序完成后该pivot位于正确的位置,且其前面的元素均不大于pivot,后面的元素均不小于pivot。判断所求位置与pivot位置的关系。若相等则输出pivot,不相等时可以对pivot前面的元素或者后面的元素再次进行快排的第一趟排序。
代码
class Solution {public: int f(vector<int>& nums,int begin,int end,int k){ if(begin==end) return nums[begin]; int pivot=nums[begin]; int fast=begin+1; int slow=begin+1; while(fast<=end){ if(nums[fast]<pivot){ swap(nums[fast],nums[slow]); slow++; } fast++; } swap(nums[begin],nums[slow-1]); if(slow-1==nums.size()-k) return nums[slow-1]; else if(slow-1<nums.size()-k) return f(nums,slow,end,k); else return f(nums,begin,slow-2,k); } int findKthLargest(vector<int>& nums, int k) { if(nums.size()==1) return nums[0]; return f(nums,0,nums.size()-1,k); }};
时间复杂度 T(n)=T(n/2)+O(n)=O(n)
运行时间 62ms
本题排序亦可过。
class Solution {public: int findKthLargest(vector<int>& nums, int k) { int len=nums.size(); sort(nums.begin(),nums.end()); return nums[len-k]; }};
时间复杂度 O(nlogn)
运行时间 19ms
0 0
- 215.Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- 215. Kth Largest Element in an Array
- uc/os操作系统读书笔记
- 第一篇:c#数据库从sql改为mysql
- git fetch将远程分支信息获取到本地
- 简单易学的机器学习算法——因子分解机(Factorization Machine)
- 粒子系统基本原理 给出粒子中心点的坐标和粒子的大小,则很容易计算出粒子所需要的4个顶点的位置坐标。粒子系统由大量的粒子构成。每个粒子具有一组属性例如位置大小纹理颜色透明度运动速度加速度生命周期等属性。
- 215. Kth Largest Element in an Array
- 【华为练习题】 闯迷宫(高级)
- 7.6 EPOJ 1700Crossing River
- git 大全
- 尝试使用 AccessibilityService 解决应用安装提示
- android之androidstudio如何导入SlidingMenu
- μC/OS-Ⅱ的终端
- 事务管理
- 关于高并发