博客
关于我
微软高频面试模拟题: 数组中第K大的元素:快速选择算法
阅读量:230 次
发布时间:2019-03-01

本文共 865 字,大约阅读时间需要 2 分钟。

说下思路:首先选第一个数作为pviot,然后通过一趟快排操作将他放到正确位置,如果此时他正好是距离右端点的第k个数,那么这个就是第k大的数,如果他距离右端点的记录大于k,则说明,要找的数在这个点右边,如果距离小于k,说明要去左边找k-(end-left+1)个数。

class Solution {public:    int findKthLargest(vector
& nums, int k) { int n = nums.size(); helper(nums,0,n-1,k); return nums[n-k]; } void helper(vector
& nums, int start, int end, int k){ if(start>=end) return; int key = nums[start], left = start, right = end; while(left
=key) right--; swap(nums[left],nums[right]); while(left
<=key) left++; swap(nums[left],nums[right]); } if(end-left+1==k) return; else if(end-left+1>k) helper(nums,left+1,end,k); else helper(nums,start,left-1,k-(end-left+1)); }};

这个算法的时间复杂度是O(n)的,为什么,因为这个递归的过程近似于只需要常数次操作,就能找到答案。所以时间复杂度是O(n)

转载地址:http://ojqv.baihongyu.com/

你可能感兴趣的文章
MySQL锁与脏读、不可重复读、幻读详解
查看>>
MySQL锁机制
查看>>
mysql锁机制,主从复制
查看>>
Mysql锁机制,行锁表锁
查看>>
Mysql锁(2):表级锁
查看>>
Mysql错误2003 -Can't connect toMySQL server on 'localhost'(10061)解决办法
查看>>
MySQL错误提示mysql Statement violates GTID consistency
查看>>
mysql长事务
查看>>
MySQL集群解决方案(4):负载均衡
查看>>
MySQL面试宝典
查看>>
mysql面试题学校三表查询_mysql三表查询分组后取每组最大值,mysql面试题。
查看>>
Mysql面试题精选
查看>>
MySQL面试题集锦
查看>>
mysql面试题,存储引擎InnoDB和MyISAM
查看>>
mysql面试题:为什么MySQL单表不能超过2000W条数据?
查看>>
mysql面试题:创建索引时会不会锁表?
查看>>
mysql面试题:高度为3的B+树可以存放多少数据?
查看>>
mysql颠覆实战笔记(八)--mysql的自定义异常处理怎么破
查看>>
mysql驱动、durid、mybatis之间的关系
查看>>
mysql驱动支持中文_mysql 驱动包-Go语言中文社区
查看>>