41 劍指Offer之二維陣列中的查詢

2021-10-08 10:42:26 字數 704 閱讀 3476

在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

很明顯,由於該二維陣列上到下遞增,左到右遞增的特殊性,遍歷整個矩陣進行查詢不是該題目的意圖所在。總結規律我們可以發現:應該從矩陣的右上角或者左下角開始查詢。

以右上角為例,首先選取右上角的數字,如果該數字等於要查詢的數字,則查詢過程結束;如果該數字大於要查詢的數字,則說明該列其他元素都大於要查詢的數字,便可以刪掉該列;如果該數字小於要查詢的數字,則說明該行其他元素也都小於要查詢的數字,便可以刪掉該行。

這樣,每一次比較都可以剔除一行或者一列,進而縮小查詢範圍,時間複雜度為o(n)。比如在下面的二維陣列中查詢數字7,查詢過程如下:

劍指offer之二維陣列中的查詢

題目 在乙個二維陣列中,每一行都按照從左到右的遞增順序排序,每一列都按照從上到下的遞增順序排序。完成乙個函式,輸入這樣乙個二維陣列和乙個整數,判斷陣列中是否有該整數。1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 演算法 首先選取陣列中右上角的數字,如果該數字等於要查詢的數...

劍指offer之二維陣列中的查詢

之前寫過一些劍指offer的題目,但是遇到vector的時候都會跳過因為並不清楚vector容器到底是個什麼,前幾天在對vector進行簡單的了解之後,理解不是很深刻,但是可以使用vector來做題了。題目 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從...

劍指offer 二維陣列

題目 在乙個二維陣列中每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。完成乙個函式,輸入這樣的陣列和乙個整數,判斷陣列中是否含有該整數。思路 由於該二維陣列從左到右,從上到下均為順序遞增的。因此右下角與左上角的數字均大於或小於其周圍數字,如果選擇改組作為起始點,則無法確定下一...