博客
关于我
微软高频面试模拟题: 数组中第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/

你可能感兴趣的文章
Vue3+Element-ul学生管理系统(第二十二课)
查看>>
Node-RED中怎样让网站返回JSON数据
查看>>
Node-RED中根据HTML文件建立Web网站
查看>>
Node-RED中解析高德地图天气api的json数据显示天气仪表盘
查看>>
Node-RED中连接Mysql数据库并实现增删改查的操作
查看>>
Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
查看>>
Node-RED中配置周期性执行、指定时间阶段执行、指定时间执行事件
查看>>
Node-RED安装图形化节点dashboard实现订阅mqtt主题并在仪表盘中显示温度
查看>>
Node-RED怎样导出导入流程为json文件
查看>>
Node-RED简介与Windows上安装、启动和运行示例
查看>>
Node-RED订阅MQTT主题并调试数据
查看>>
Node-RED通过npm安装的方式对应卸载
查看>>
node-request模块
查看>>
node-static 任意文件读取漏洞复现(CVE-2023-26111)
查看>>
Node.js 8 中的 util.promisify的详解
查看>>
node.js debug在webstrom工具
查看>>
Node.js Event emitter 详解( 示例代码 )
查看>>
Node.js GET、POST 请求是怎样的?
查看>>
Node.js HTTP模块详解:创建服务器、响应请求与客户端请求
查看>>
Node.js RESTful API如何使用?
查看>>