劍指offer04 二維陣列查詢

2022-07-09 15:27:13 字數 1136 閱讀 3890

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

測試示例:

矩陣 matrix 如下:

\[ \begin

1 & 2 & 8 & 9\\

2 & 4 & 9 & 12\\

4 & 7 & 10 & 13\\

6 & 8 & 11 & 15

\end

\]查詢數字7,則返回true;

查詢數字5,則返回false;

從矩陣來看的話,每行從左到右遞增,每列從上到下遞增,

我們從陣列中選取乙個數字,

如果選取的數字剛好和要查詢的數字相等,則結束查詢過程

若選取的數字小於要查詢的數字,則往右邊或者下邊找

若選取的數字大於要查詢的數字,則往左邊或者上邊找

如果我們從左上角開始查詢的話,

當選取的數字小於要查詢的數字時,並不能起到排除其他陣列元素的作用,因為左上角往右往下都是遞增的

從右下角開始查詢也是如此

\[ \begin

1 & \rightarrow2 &  8  & 9\\

\downarrow\\

2 &  4 & 9 & 12\\\\

4 &  7 & 10 & 13\\\\

6 &  8 & 11 & 15

\end

\]然而,換個思維

如果我們從右上角開始查詢的話,

當選取的數字小於要查詢的數字,則只能往下邊找,排除了左邊同行的陣列元素

當選取的數字大於要查詢的數字,則只能往左邊找,排除了下邊同列的陣列元素

\[ \begin

1  &  2\leftarrow &  8\leftarrow & 9\\

&\downarrow\\

2 & 4 & 9 & 12\\

&\downarrow\\

4 & 7 & 10 & 13\\

\\6 & 8 & 11 & 15

\end

\]弄清了原理,寫**的思路就很清晰了

class solution return false;

}};

劍指offer 04 二維陣列的查詢

在乙個 n m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。示例 現有矩陣 matrix 如下 1,4,7,11,15 2,5,8,12,19 3,6,9,16,22 10,13,1...

劍指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。如...