剑指offer编程

来源:互联网 发布:尹美莱 知乎 编辑:程序博客网 时间:2024/05/23 23:49

二维数组中的查找

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

代码:

  1.  /** 
  2.      * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 
  3.      * 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 
  4.      * <p/> 
  5.      * 规律:首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束: 
  6.      * 如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行。 
  7.      * 也就是说如果要查找的数字不在数组的右上角,则每-次都在数组的查找范围中剔除)行或者一列,这样每一步都可以缩小 
  8.      * 查找的范围,直到找到要查找的数字,或者查找范围为空。 
  9.      * 
  10.      * @param matrix 待查找的数组 
  11.      * @param number 要查找的数 
  12.     * @return 查找结果,true找到,false没有找到     
  13.  */  

public class Solution {
    public static boolean Find(int [][] array,int target) {
                //输入条件判断
        if(array == null || array.length < 1 || array[0].length<1){
            return false;
        }
        int rows = array.length;        //二维数组的行数
        int cols = array[0].length;    //二维数组的列数
        int row = 0;                         //起始的行号
        int col = cols-1;                  //起始的列号
        
        while(row >= 0 && row < rows && col >= 0 && col <cols){
            if(array[row][col] == target){          //如果找到待查的数就退出
                return true;
            }else if(array[row][col]>target){     //如果当前的数比待查的数大,则待查的数在当前的数的左边
                col--;                                         //列数减1,当前的数往左移         
                
            }else{
                row++;                                     //如果当前的数比待查的数小,则待查的数在当前行的下方行数加1,当前的数往下移一行
            }
        }
        return false;
    }
    public static void main(String[] args){
        int [][] array={{1,3,5,7,9},
                        {2,4,6,8,10},
                        {3,5,7,9,11},
                        {4,6,8,10,12}};
                                     
        System.out.println(Find(array,3));    //要查找的数在数组中

       System.out.println(Find(array,13));     //要查找的数不在数组中
    } 
}

0 0
原创粉丝点击