1.二維陣列中的查詢
二維陣列中的查詢:
在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
分析:
使用暴力法,若從第一行第一列開始查詢,這樣很麻煩,但是,根據題意,每一行,每一列都是遞增的,
所以我們可以換個思路,從陣列的左下角或者右上角開始進行判斷。
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
這樣做為什麼可行呢?把陣列想象成一個棋盤,起點是左下角,終點是target(棋盤中的某個位置)。其實就是找一條最短路從起點到終點,那麼判斷的條件是如果當前元素比target大,那麼就往往上走;如果target比當前元素小,就往右走。
public class Solution {
public boolean Find(int target, int [][] array) {
boolean flag = false;
int rows = array.length;
int cols = array[0].length;
if(array!=null && rows>0 && cols>0){
int row = rows - 1;
int col = 0;
while(row>=0 && col<cols){
int temp = array[row][col];
if(target>temp){
++col;
}else if(target<temp){
--row;
}else{
flag = true;
break;
}
}
}
return flag;
}
}