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


 

猜你喜欢

转载自blog.csdn.net/zpwggi123/article/details/83096154
今日推荐