在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。
請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
樣例
輸入陣列:
[ [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 思路有三種,...