剑指Offer——数据流中的中位数(JS实现)
发布日期:2021-06-30 15:21:34
浏览次数:2
分类:技术文章
本文共 1398 字,大约阅读时间需要 4 分钟。
题目描述
解题思路
- 这道题属于考查二分查找
- 本题如果直接采用JS中自带的排序肯定是要超时的,要不然LeetCode也不会将这道题归为困难
- 二分查找的思路定义两个指针,一个指针指向的是数组元素的第一个下标,另一个指针指向的是数组元素的最后一个元素的下标。
- 中位数下标指的是通过四舍五入的方法,左边指针的下标 + 右边指针的下标 / 2然后进行四舍五入,得到的就是中位数下标
- 如果要添加的值大于中位数下标对应的值,左边的指针移动到中位数指针+1的位置。如果要添加的值小于中位数下标对应的值,右边的指针移动到中位数指针-1的位置,如果相等则直接添加导致中位数下标的位置,其余元素后移。
- 循环的结束条件是左指针>右指针
解题代码
var MedianFinder = function() { this.stack = [];};MedianFinder.prototype.addNum = function(num) { if (this.stack.length === 0) { this.stack.push(num); return; } // 定义左指针和右指针 注意:这里的指针指的都是下标 let left = 0; let right = this.stack.length - 1; while (left <= right) { // 找到中位数的下标 let mid = Math.floor((left + right)/2); if (num === this.stack[mid]) { this.stack.splice(mid,0,num); return; } else if (num < this.stack[mid]) { right = mid - 1; } else { left = mid + 1; } } this.stack.splice(right+1,0,num);};MedianFinder.prototype.findMedian = function() { if (this.stack.length === 0) { return []; } if (this.stack.length % 2 === 0) { let len = this.stack.length; return (this.stack[len/2] + this.stack[len/2 -1]) / 2 } else { let mid = Math.floor(this.stack.length/2); return this.stack[mid]; }};
总结(本题给我们的启示思路)
- 启示一:学会使用二分查找
- 启示二:学会使用splice插入元素
- 启示三:通过Math.floor进行四舍五入来求中位数下标
转载地址:https://jiapy.blog.csdn.net/article/details/115956176 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月12日 13时37分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MatConvNet安装
2019-05-01
ROS安装与卸载
2019-05-01
安装openrave 0.9的各种依赖包
2019-05-01
trajopt代码使用
2019-05-01
kpm代码使用细节
2019-05-01
redis
2019-05-01
@FeignClient注解的重复名称解决
2019-05-01
ClassFile之Methods
2019-05-01
java.net.BindException: 无法指定被请求的地址
2019-05-01
scala list
2019-05-01
k8s设置阿里云仓库
2019-05-01
svn服务器安装
2019-05-01
spark 笔记1
2019-05-01
svn 没有作者信息) | (没有时间信息
2019-05-01
shell dirname basename
2019-05-01
未来已至,5G加持下的云游戏将走向何方?
2019-05-01
闭关三月!猛男逆道而行,四杀斩获阿里 / 腾讯 / 京东 / 百度等大厂 offer
2019-05-01
计算机网络 —— 网络层 1.
2019-05-01
Echarts使用及动态加载图表数据 折线图X轴数据动态加载
2019-05-01