在乙個 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。
選右下角,往上走和往左走都減小,不能選
選左下角,往右走增大,往上走減小,可選
選右上角,往下走增大,往左走減小,可選
複雜度分析
時間複雜度:o(n+m)。訪問到的下標的行最多增加 n 次,列最多減少 m 次,因此迴圈體最多執行 n + m 次。
空間複雜度:o(1)。
//選取左上角作為初始點進行分析
class
solution
return
false;}
};
class
solution
// if (matrix[i][j] == target)
// }
// }
// return false;
//二叉搜尋樹法
if(matrix.
size()
<=0)
std::ios::
sync_with_stdio
(false);
//提速
int x = matrix[0]
.size()
-1;int y =0;
while
(x >=
0&& y < matrix.
size()
)else
if(matrix[y]
[x]< target)
else
}return
false;}
};
面試題04. 二維陣列中的查詢(標誌數,清晰**)
劍指offer04 二維陣列查詢
在乙個 n m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。測試示例 矩陣 matrix 如下 begin 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 ...
劍指Offer04 二維陣列中的查詢
在乙個 n m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個高效的函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。現有矩陣 matrix 如下 1,4,7,11,15 2,5,8,12,19 3,6,9,16,22 10,13,1...
劍指 Offer 04 二維陣列中的查詢
在乙個 n m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。遍歷陣列 時間複雜度 o nm 空間複雜度o 1 從二維陣列的右上角開始查詢。如果當前元素等於目標值,則返回 true。如...