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

       例子是在二维数组中查找数字7。

注:矩阵中加阴影背景的区域是下一步查找的范围。

        总结上述查找的过程:首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。

代码实现:

public class Solution{
       public static void main(String[] args){
            int[][] array={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
            System.out.println(find(array,7));
       }

       public static boolean find(int[][] arr,int target){
             if(arr==null||arr.length==0){
                   return false;
             }
             int rows=arr.length;
             int cols=arr[0].length;
             int rowIdx=0;
             int colIdx=cols-1;
             boolean containsNum=false;
             while(rowIdx<rows&&colIdx>=0){
                    if(arr[rowIdx][colIdx]==target){
                          containsNum=true;
                          break;
                    }else if(arr[rowIdx][colIdx]>target){
                           colIdx--;
                     }else{
                           rowIdx++;
                     }
             }
             return containsNum;
       }
}

 

 posted on 2018-09-06 20:01  会飞的金鱼  阅读(101)  评论(0)    收藏  举报