博客
关于我
微软高频面试模拟题: 数组中第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 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>
mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
查看>>
mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
查看>>
mysql 主从关系切换
查看>>
MYSQL 主从同步文档的大坑
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>
Mysql 事务知识点与优化建议
查看>>
Mysql 优化 or
查看>>
mysql 优化器 key_mysql – 选择*和查询优化器
查看>>
MySQL 优化:Explain 执行计划详解
查看>>
Mysql 会导致锁表的语法
查看>>
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>