劍指offer 二維陣列中的查詢

2021-07-28 03:53:11 字數 1085 閱讀 4264

題目描述

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

例子輸入:

1 2 8 9

2 4 9 12

4 7 10 13

6 8 11 15

輸入整數:7

輸出:true

分析:首先我們選取陣列右上角的數字9,並且9是第4列最小的數字,9>7,7不會出現在第四列。於是第4列從需要考慮的區域內剔除。

1 2 8

2 4 9

4 7 10

6 8 11

在剩下的矩陣中,右上角的數字是8,同樣8大於7,因此剔除第3列。

1 2

2 4

4 7

6 8在剩餘的兩列陣列中,數字2位於陣列的右上角。2小於7,那麼要查詢的7可能在2的右邊,也有可能在2的下邊。在前面的步驟中,我們已經剔除2右邊的列,因此7只有可能出現在2的下邊。於是我們把數字2所在的行也剔除,只分析剩下的三行兩列數字。

2 4

4 7

6 8在剩下的數字中,數字4位於右上角,4小於7,把數字4所在的行也剔除。最後只剩下兩行兩列的數字。在剩下的數字中,位於右上角的剛好就是我們要查詢的數字7,查詢過程結束。返回true

4 7

6 8

總之就是:從有效區域陣列的最右上角的那個數字(假設為x)著手考慮,若x>要查詢的數字,就剔除當前x所在的列;若x《要查詢的數字,就剔除x所在的行。每一次都從有效陣列的最右上角考慮。

bool find(int target, vector

>

array)

else

if(array[row][col] > target) //若當前右上角的數字大於target,剔除這一列

--col;

else

//若當前右上角的數字大於target,剔除這一行

++row;

}return found;

}

劍指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 思路有三種,...