《劍指offer》 二維陣列中的查詢

2021-09-26 14:31:53 字數 1106 閱讀 5048

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

第一種方法:遍歷

時間複雜度:對於乙個 m 行,n 列的陣列,每一行都遍歷,那麼o(m*n),即使遍歷的時候使用二分查詢,o(logm * n)

空間複雜度:o(1)

完全沒有使用到這是乙個有序陣列的特性

第二種方法:從右上角或者左下角開始查詢

根據陣列是有序陣列這一特徵,如果這個整數 num 小於 martix[ i ][ j ],那麼它就在 i 的右面,j 的下面。反之,如果 num 大於 martix[ i ][ j ],那麼它就在 i 的左面,j 的上面。

如果我們從左上角開始查詢,那麼當 num 偏大的話,無法確定是走右面,還是走下面

如果從右上角開始查詢,那麼當 num 偏大,就走下面;num 偏小,就走左面

也就是說,我們每次比較查詢之後,都可以根據偏大還是偏小確定走下還是走左,而不是比較查詢之後,兩條路線都是偏大(或偏小)

public

static

boolean

find

(int

matrix,

int index,

int columns,

int number)

int i =0;

int j = columns -1;

while

(i < index && j >=0)

if(number > matrix[i]

[j])

if(number < matrix[i]

[j])

}return

false

;}

測試用例

二維陣列中包含查詢的數字

查詢的數字是陣列中的最大值和最小值:1、15

查詢的數字介於陣列中的最大值和最小值之間:7

二維陣列中沒有查詢的數字

查詢的數字大於陣列中的最大值:20

查詢的數字小於陣列中的最小值:0

查詢額數字在最大值和最小值之間,但是陣列中沒有這個數字:3

特殊輸入測試:空陣列

劍指offer 二維陣列中查詢

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

劍指offer 二維陣列中查詢

從今天開始每天一題,除了節假日。在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。class solution return false class solut...

劍指offer 二維陣列中查詢

要求如下 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數 示例如下 7,1,2,8,9 2,4,9,12 4,7,10,13 6,8,11,15 思路有三種,...