javascript - 如何快速找到数量a的大小处于,数组b中那个键名与键名之间
怪我咯
怪我咯 2017-04-11 11:17:56
[JavaScript讨论组]

变量a = 8 以及已按大小顺序排列好的数组 b = array(1,3,5,7,8.9,9,11.3);

假设数组长度未知,变量值未知,数组键值按从小到大已排列好
如何快速找到数量a的大小处于,数组b中那个键名与键名之间

eg: a=8,处于b[4]与b[5]之间

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
高洛峰

长度未知…………不太可能吧……不就是b.length就完了吗…………
这种查询除了二分还有什么更好的方法吗……

或者自己封装一个class,在数组建立的时候做一个映射,把数据按照大小分组,怎么分组看你的要求,可以大幅提高速度。
比如简单一点,按照整数分组,像这样:

class ClassA extends Array {
    constructor(...args) {
        super(...args);
        this.hash = [];
        for(let i = 0; i < this.length; i++) {
            if(!this.hash[Math.floor(this[i])]) this.hash[Math.floor(this[i])] = i;
        }
    }
}

数组还是那个数组不变,只是添加一个hash,里面代表的是整数段的起始下标,比如你要查询8.5这个数,那么只需要查询this.hash[Math.floor(8.5)]this.hash[Math.floor(8.5) + 1],两个下标之间的数据就行了,假如这俩hash里面是空的,那么分别往前、往后找就行,直到找到值为止。要是数据过于稀疏,那么可以给这个hash再做一个hash,记录有效整数段,反正就是空间换时间啦。

怪我咯

明显使用二分查找

黄舟

实现方法:

1、先排序(冒泡、快速排序等,本题已优先排列好)
2、插入需要判断的元素,再排序
3、返回插入数组所在的键值
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号