1. 程式人生 > >1.二維陣列中的查詢

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;
    }
}