猿问

如何快速找到数量a的大小处于,数组b中那个键名与键名之间

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

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

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


守候你守候我
浏览 549回答 1
1回答

慕容森

长度未知…………不太可能吧……不就是b.length就完了吗…………这种查询除了二分还有什么更好的方法吗……或者自己封装一个class,在数组建立的时候做一个映射,把数据按照大小分组,怎么分组看你的要求,可以大幅提高速度。比如简单一点,按照整数分组,像这样:class&nbsp;ClassA&nbsp;extends&nbsp;Array&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;constructor(...args)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(...args);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.hash&nbsp;=&nbsp;[];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;this.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!this.hash[Math.floor(this[i])])&nbsp;this.hash[Math.floor(this[i])]&nbsp;=&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} }数组还是那个数组不变,只是添加一个hash,里面代表的是整数段的起始下标,比如你要查询8.5这个数,那么只需要查询this.hash[Math.floor(8.5)]和this.hash[Math.floor(8.5) + 1],两个下标之间的数据就行了,假如这俩hash里面是空的,那么分别往前、往后找就行,直到找到值为止。要是数据过于稀疏,那么可以给这个hash再做一个hash,记录有效整数段,反正就是空间换时间啦。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答