題目:在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數
第一種方法:遍歷
時間複雜度:對於乙個 m 行,n 列的陣列,每一行都遍歷,那麼o(m*n),即使遍歷的時候使用二分查詢,o(logm * n)
空間複雜度:o(1)
完全沒有使用到這是乙個有序陣列的特性
第二種方法:從右上角或者左下角開始查詢
根據陣列是有序陣列這一特徵,如果這個整數 num 小於 martix[ i ][ j ],那麼它就在 i 的右面,j 的下面。反之,如果 num 大於 martix[ i ][ j ],那麼它就在 i 的左面,j 的上面。
如果我們從左上角開始查詢,那麼當 num 偏大的話,無法確定是走右面,還是走下面
如果從右上角開始查詢,那麼當 num 偏大,就走下面;num 偏小,就走左面
也就是說,我們每次比較查詢之後,都可以根據偏大還是偏小確定走下還是走左,而不是比較查詢之後,兩條路線都是偏大(或偏小)
public
static
boolean
find
(int
matrix,
int index,
int columns,
int number)
int i =0;
int j = columns -1;
while
(i < index && j >=0)
if(number > matrix[i]
[j])
if(number < matrix[i]
[j])
}return
false
;}
測試用例
二維陣列中包含查詢的數字
查詢的數字是陣列中的最大值和最小值:1、15
查詢的數字介於陣列中的最大值和最小值之間:7
二維陣列中沒有查詢的數字
查詢的數字大於陣列中的最大值:20
查詢的數字小於陣列中的最小值:0
查詢額數字在最大值和最小值之間,但是陣列中沒有這個數字:3
特殊輸入測試:空陣列
劍指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 思路有三種,...