1.数组:二维数组的查找

 

https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqId=11154&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路:

思路一:暴力遍历法进行查找 o(n^2)

思路二:类似于二分查找

已知数组最右上角的元素 nums[i][j]总是大于它左边所有的元素,小于它下面左右的元素;所以从最右的元素进行查找;

如果target>nums[i][j] 向下移动一行,i++

如果target<nums[i][j] 向右移动一行,j–;进行查找

如果查找到。返回true

当遍历完整个数组都没有被查找到,返回false:利用while()循环在数组内部进行查找

注意判断边界条件

public boolean Find(int target, int [][] array) {
        if(array==null || array.length==0){
            return false;
        }
        boolean isFind=false;
        int row=array.length;
        int col=array[0].length;
        int i=0,j=col-1;
        while(i<row && j>=0){
            if(array[i][j] > target){
                j--;
            }else if(array[i][j] < target){
                i++;
            }else{
                isFind=true;
                break;
            }
        }
        return isFind;
    }

 

点赞