劍指Offer 二維陣列中的查詢

2021-10-03 10:14:14 字數 1154 閱讀 8354

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。

請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

樣例

輸入陣列:

[ [1,2,8,9],

[2,4,9,12],

[4,7,10,13],

[6,8,11,15]

]如果輸入查詢數值為7,則返回true,

如果輸入查詢數值為5,則返回false。

假設矩陣一共有 n 行,m列

剛開始嘗試做時,把二維陣列拆成一維陣列,在一維陣列中利用二分進行查詢。

時空分析

時間複雜度分析:時間複雜度是o(nlogm)

空間複雜度分析:o(1)

c++ **

class

solution

if(array.

at(i).at

(l)== target)

}return flag;}}

;

矩陣matrix[m][n] ,x為右上角定點處的數值:

x左邊的數都小於等於x,x下邊的數都大於等於x

x左邊的數都小於等於x,x下邊的數都大於等於x

因此我們可以從整個矩陣的右上角開始列舉,假設當前列舉的數是 x:

如果 x 等於target,則說明我們找到了目標值,返回true;

如果 x 小於target,則 xx 左邊的數一定都小於target,我們可以直接排除當前一整行的數;

如果 x 大於target,則 xx 下邊的數一定都大於target,我們可以直接排序當前一整列的數;

排除一整行就是讓列舉的點的橫座標加一,排除一整列就是讓縱座標減一。

當我們排除完整個矩陣後仍沒有找到目標值時,就說明目標值不存在,返回false。

時空分析

每一步會排除一行或者一列,矩陣一共有 n 行,m 列,所以最多會進行 n+m 步。所以時間複雜度是o(n+m)

c++ **

class

solution

return

false;}

};

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