題目描述
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
/**
* Created by ZengXihong 2019-05-26.
*/
public class Solution1 {
/**
* 尋找數字 target 是否在數組 array 中
* 原理: 從數組的左下角開始尋找該數,
* 如果該數大于目標,則目標數在該行之上,行數遞減
* 如果該數小于目標,則目標數在該數的右側,列數遞增
* 否則當前數等于目標數
* 如果從左下遍歷到左上都不存在,即數組不包含目標數
* @param array 數組
* @param target 目標數字
* @return
*/
public boolean find(int [][] array,int target) {
// 獲取數組的行數,減 1 是因為獲取數組某個值時取值從 0 開始
int len = array.length-1;
int i = 0;
// 如果當前行數大于等于 0(即第一行) 并且 取的值的坐標列數小于第一行的元素個數,則繼續比較
while((len >= 0)&& (i < array[0].length)){
//如果當前行的第 1 個數大于 目標數,則 目標數在此行之上,故行數 減 1
if(array[len][i] > target){
len--;
// 如果當前行數的第 i 個數小于目標數,則說明該數在i 的右側 ,故 i 加 1
}else if(array[len][i] < target){
i++;
//否則 這個數就為目標數
}else{
return true;
}
}
return false;
}
}