面試題4 二維陣列中的查詢 Java實現

2021-09-11 11:49:40 字數 1062 閱讀 5698

題意:在二維陣列中,每一行都衝左到右遞增。每一列都從上到下遞增。輸出乙個二維陣列和乙個整數。判斷陣列中是否含有這個整數。

題解:首先,我們來談一下最為直觀的解,就是遍歷一遍二維陣列,時間複雜度o(n*m),空間複雜度o(1)。當然這個時間複雜度是不足以拿offer的。我們再來看看時間複雜度為o(n),空間複雜度微o(1)的演算法。

當我們需要解決乙個比較複雜的問題時,乙個很有效的辦法就是從乙個具體的問題入手,通過分析簡單具體的例子,試圖尋找普遍的規律。

針對這個問題呢,我們不妨也從具體的例子入手。假設array陣列為:

128

9248

124710

136811

15

我們尋找7。直接的想法從左上角開始找,1小於7.那麼7肯定會在1的右邊或者下邊。這個時候有三個區域。右邊區域,下邊區域和右邊與下邊重疊的區域,不好確定接下來該怎麼搞。我們再試試從左上角開始。9大於7,那麼7就只能在9的左邊,不可能在9在的當前列。那麼可以排除9這一列。繼續找左上角,是8。8大於7排除8在的當前列。繼續找左上角2。發現2小於7,那麼肯定在2的下面,排除2所在的當前行。繼續找左上角,找到4,發現4小於7,排除4所在的當前行。繼續左上角,發現是7.找到返回。該演算法每次都能排除一行或者一列。所以時間複雜度是o(n+m),空間複雜度是o(1)。

根據題目的特點,從乙個具體的案例去分析,找出優解。

class

solution

int rows = array.length;

int columns = array[0]

.length;

int currentrow =0;

int currentcolumn = columns -1;

while

( currentrow < rows && currentcolumn >=0)

if(array[currentrow]

[currentcolumn]

< target)

else

}return

false;}

}

面試題4 二維陣列中的查詢

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

面試題4 二維陣列中的查詢

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

面試題4 二維陣列中的查詢

題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下的遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。c 實現 includeusing namespace std bool find int numbers,int rows,...