在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
看到這個題目的時候 首先我想到的是暴力求解,兩個for迴圈遍歷,直到(terget==array[i][j]),**示例:
public
class
solution}}
return
false;}
}
這時我們可以計算出時間複雜度:o(n^2)、空間複雜度:o(1)
然後我們進行第二種演算法
首先: 我們可以根據二維陣列的特性,在查詢陣列裡是否有這個整數時,我們可以按行和列去查詢。
int row=(int)array.size();
int rol=(int)array.size();
從題中知道:二維陣列,每一行從小到大,每一列從小到大 ,如圖所示:
我們可以看出
如果array[i][j] > target 則向左走 即 j–注意:如果array[i][j]< target 則向下走 即 i++
**示例:
class
solution
if(target
[0]||target>array[row-1]
[col-1]
)int i=0;
int j=col-1;
while
(i=0)
else
if(array[i]
[j]else
}return0;}};
時間複雜度:o(行高 + 列寬)
空間複雜度:o(1)
這時第二種演算法,但是我在看別人寫的**的時候,又發現了另外一種演算法:二分查詢
128
9249
124710
136811
15
比如說,我們要找10,首先我們可以把第一行和第一列第二列排除掉;
9
1210
1311
15
我再觀察第 1 列,發現最後一行是可以排除的,因為最後一行最小的數 11 是大於 10 的。同理,我觀察第 1 行,發現最後一列是可以排除的,因為這一列中最小的元素 12 大於 10。這樣以來就只餘下這些了:
9
10
基於以上發現,可以給行和列維護乙個範圍。交替地在餘下的矩陣的左上方和右下方做二分查詢,來縮小範圍。
**示例:
class
solution
else
if(target < array[i]
[middle]
)else
if(target > array[i]
[middle])}
}return
false;}
};
Python 劍指offer(1)二維陣列的查詢
題目 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。環境python2.7.3 解 coding utf 8 class solution array 二維...
劍指offer 1 二維陣列查詢
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。二維陣列是有序的,比如下面的資料 1 2 3 4 5 6 7 8 9可以直接利用左下角數字開始查詢 大於 比較...
劍指offer 1 二維陣列查詢
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數 首先是先模擬獲取隨機遞增陣列 public static int getarray int n,int m 初...