前言
牛客網劍指offer的66道題,刷起來!每道題會提供簡單的思路以及測試通過的程式碼
題目描述
在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
解答思路
一種簡單的方法就是整個陣列都遍歷,當然,陣列從左到右,從上到下都是有序的,如果你遍歷整個陣列的話,那就浪費了陣列的區域性有序性了。
如果我們從 row = 0 和col = 0開始遍歷的話,發現右邊的數比 array[row][col] 大,而下邊也比 array[row][col]大,這樣的話,貌似區域性有序性沒有派上用場。
遍歷不一定要從 row = 0 和 col = 0開始,有時候,換個角度,一切就豁然開朗了。實際上我們從陣列的左下角開始遍歷的話,如果 array[row][col] > target,則往右移動,如果array[row][col] < target,則往下移動,否則找到目的數。這樣,就完美利用到區域性有序性了。程式碼如下:
public boolean Find(int target, int [][] array) {
if(array == null)return false;
int row = array.length - 1;
int col = array[0].length - 1;
int j = 0;
while (row >= 0 && j <= col) {
if (array[row][j] > target) {
row--;
} else if (array[row][j] < target) {
j++;
} else {
return true;
}
}
return false;
}