亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何快速找到數量a的大小處于,數組b中那個鍵名與鍵名之間

如何快速找到數量a的大小處于,數組b中那個鍵名與鍵名之間

守候你守候我 2018-08-14 11:10:59
變量a = 8 以及已按大小順序排列好的數組 b = array(1,3,5,7,8.9,9,11.3);假設數組長度未知,變量值未知,數組鍵值按從小到大已排列好如何快速找到數量a的大小處于,數組b中那個鍵名與鍵名之間eg: a=8,處于b[4]與b[5]之間
查看完整描述

1 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

長度未知…………不太可能吧……不就是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,記錄有效整數段,反正就是空間換時間啦。


查看完整回答
反對 回復 2018-09-19
  • 1 回答
  • 0 關注
  • 563 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號