前端常見算法面試題之 - 二維數(shù)組中的查找[JavaScript解法]

題目描述

在一個二維數(shù)組中膛堤,每一行都按照從左到右遞增的順序排序垮媒,每一列都按照從上到下遞增的順序排序倔韭。請完成一個函數(shù)恳谎,輸入這樣的一個二維數(shù)組和一個整數(shù)芝此,判斷數(shù)組中是否含有該整數(shù)憋肖。

輸入輸出分析

每當(dāng)拿到一個算法題的時候,不要腦子中稍微有點(diǎn)思路后婚苹,就開始寫代碼岸更。而是先把題目中規(guī)定的參數(shù)搞清楚,然后把參數(shù)的例子寫出來膊升。

本題兩個參數(shù)舉例:

  1. 遞增二維數(shù)組
1   2   8   9
2   4   9   12
4   7   10  13
6   8   11  15

注意 題目只說每一行是遞增的怎炊,沒有說增幅是多少,不要以為增幅是1廓译。同時也沒有說行數(shù)和列數(shù)相等

  1. 要查找的整數(shù)

比如:7评肆、5、0非区、16

對應(yīng)的輸出結(jié)果:true瓜挽、false、false征绸、false

實(shí)現(xiàn)思路

  1. 暴力遍歷法

面試官要的肯定不是這個結(jié)果久橙,直接跳過

  1. 二分查找法

仔細(xì)看這個二維數(shù)組最右上角這個數(shù)。它所在的行管怠,左面的數(shù)字比它邢浴;所在的列排惨,下面的數(shù)字比它大:

在這里插入圖片描述

如果要查詢的數(shù)字比9大吭敢,那么9所在的行就不用在比較了,接下來只需要比較9下面的所有行

在這里插入圖片描述

如果要查詢的數(shù)字比9小暮芭,那么9所在的列就不用在比較了,接下來只需要比較9左面的所有列

在這里插入圖片描述

通過這一次的比較欲低,我們就能得到一個新的范圍(矩形)辕宏。接著繼續(xù)利用新范圍右上角的數(shù)字,與要查找的整數(shù)進(jìn)行比較砾莱。比較過后瑞筐,又能得到一個新的進(jìn)一步縮小的范圍(矩形)。如此往復(fù)腊瑟,直到找到目標(biāo)整數(shù)聚假,或者沒有找到。

每一次比較的過程闰非,比較類似二分查找

比如要查找數(shù)字7膘格,那么查找的路徑如下圖:

在這里插入圖片描述

每一步都是通過比較所在行左面數(shù)字和所在列下面數(shù)字的大小,確定下一步指針的移動方向财松。

同理瘪贱,我們還可以從矩形的左下角的數(shù)字開始比較

最后纱控,別忘了要把特殊情況考慮進(jìn)去,比如參數(shù)的特殊值

代碼實(shí)現(xiàn)

function find(target, array) {
    let rows = 0; // 右上角數(shù)字所在的行
    let cols = array[0].length - 1; // 右上角數(shù)字所在的列
    let result = false;

    // 特殊情況判斷. 其他特殊情況比如target不在array里,這里不在列舉
    if(array.length === 0) return false;

    while(cols >= 0 && rows < array.length) {
        if(array[rows][cols] === target) {
            result = true;
            break;
        } else if(array[rows][cols] > target) {
            // 如果右上角數(shù)字比目標(biāo)數(shù)字大,向左移動指針
            cols--;
        } else {
            // 如果右上角數(shù)字比目標(biāo)數(shù)字小,向下移動指針
            rows++;
        }
    }

    return result;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末菜秦,一起剝皮案震驚了整個濱河市甜害,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌球昨,老刑警劉巖尔店,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異主慰,居然都是意外死亡闹获,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門河哑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來避诽,“玉大人,你說我怎么就攤上這事璃谨∩陈” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵佳吞,是天一觀的道長拱雏。 經(jīng)常有香客問我,道長底扳,這世上最難降的妖魔是什么铸抑? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮衷模,結(jié)果婚禮上鹊汛,老公的妹妹穿的比我還像新娘。我一直安慰自己阱冶,他們只是感情好刁憋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著木蹬,像睡著了一般至耻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上镊叁,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天尘颓,我揣著相機(jī)與錄音,去河邊找鬼晦譬。 笑死疤苹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛔添。 我是一名探鬼主播痰催,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兜辞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了夸溶?” 一聲冷哼從身側(cè)響起逸吵,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缝裁,沒想到半個月后扫皱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捷绑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年韩脑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粹污。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡段多,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出壮吩,到底是詐尸還是另有隱情进苍,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布鸭叙,位于F島的核電站觉啊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沈贝。R本人自食惡果不足惜杠人,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宋下。 院中可真熱鬧嗡善,春花似錦、人聲如沸杨凑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撩满。三九已至,卻和暖如春绅你,著一層夾襖步出監(jiān)牢的瞬間伺帘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工忌锯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伪嫁,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓偶垮,卻偏偏與公主長得像张咳,于是被迫代替她去往敵國和親帝洪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容