題目描述
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
題目大意及分析
這道題其實就是判斷二維數組中能不能找的到所給的 target 這個數,通過觀察二位數組的排列規律(每一行: 左→右遞增;每一列:上→下遞增),我們可以發現在數組左下角的數向上是遞減,向右是遞增。(右上角的數向下是遞增,向左是遞減)用這個特殊的點,我們就可以很好的遍歷整個數組了。我的參考代碼是選取的右上角的數。
代碼
public class Solution {
public boolean Find(int target, int [][] array) {
if(array.length==0 || array[0].length==0)//數組為空返回False,否則本題不會完全通過;
return false;
int x = 0;
int y = array[0].length-1;
int w = array[x][y];//右上角的數
while(w != target){
if(x >= array.length-1 || y <= 0)
return false;
if(w > target)
y--;
if(w < target)
x++;
w = array[x][y];
}
return true;
}
}