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

2021-10-04 10:34:06 字數 1284 閱讀 5493

在乙個 n * m

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

示例:現有矩陣 matrix 如下:

[1, 4, 7, 11, 15],

[2, 5, 8, 12, 19],

[3, 6, 9, 16, 22],

[10, 13, 14, 17, 24],

[18, 21, 23, 26, 30]

給定 target = 5,返回 true。

給定 target = 20,返回 false。

thinking:兩層loop 查詢

時間複雜度:o(m*n)二維陣列中的每個元素都被遍歷,因此時間複雜度為二維陣列的大小。

空間複雜度:o(1)

/***

*1.暴力法

*/

public

boolean

findnumberin2darray

(int

matrix,

int target)

for(

int i=

0;i}return

false

;}

thinking:通過分析,可以知道 如果使用暴力破解的話 會出現重複的元素查詢,因此,在一定程度上,不可缺。如果一開始從右上角開始查詢 如果target小於當前數 說明不在這一列,所以,排除掉一列,如果反覆,如果當前數大於target說明在這一列上,rows++。

時間複雜度:o(m+n)訪問到的下標的行最多增加 n 次,列最多減少 m 次,因此迴圈體最多執行 n + m 次。

空間複雜度:o(1)

public

boolean

findnumberin2darray

(int

matrix,

int target)

int rows = matrix.length-

1,cols = matrix[0]

.length;

int r =

0,c = cols-1;

//右上角開始

while

(r<=rows && c >=0)

if(target < num)

else

}return

false

;}

劍指offer4 二維陣列中查詢

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列也都是按照從上到下遞增的順序排序。完成乙個函式,輸入乙個二維陣列和乙個整數,判斷該陣列中是否含有該整數。最開始的想法肯定就是暴力搜尋了,雙重for迴圈,但是這樣就和題目中給定的遞增的條件沒什麼關係了,顯然不是題目的本意。於是,採取另一種辦法...

劍指offer 4 二維陣列中查詢

乙個n m的二維陣列中,每一行都按照從左往右遞增的順序排序 每一列都按照從上到下遞增的順序排序。實現乙個函式 輸入乙個這樣的陣列和乙個整數,判斷這個陣列中有沒有這個整數 思路 方法一 暴力遍歷矩陣 matrix o n m 方法二 矩陣逆時針旋轉40 矩陣,得到二叉搜尋樹 根節點對應的是 7 3 這...

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

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。首先選取陣列中右上角的數字。如果該數字等於要查詢的數字,則查詢結束 如果該數字大於要查詢的數字,則剔除該數字所...