剑指offer第二版面试题3:二维数组中的查找(JAVA版)

题目:

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

2 4 9 12

4 7 10 13

6 8 11 15

思路:每次取右上角的一个数字(该例子中取9),如果9大于要找的数字则排除9的那列,否则派出9 的那行

public class Test3 {
    //arr为要查找数字的数组,num为要查找的数字
    public static boolean find(int[][] arr,int num){
        boolean flag=false;
        
        if(arr!=null && arr.length!=0){
            int cols=arr.length;//列数
            int rows=arr.length;//行数
            //当前行和当前列(第一次为最后一个元素)
            int row=0;
            int col=cols-1;
            
            while(row<=rows-1 && col>=0){
                // 比较二维数组中元素与number的关系
                if(arr[row][col]==num){
                    flag=true;
                    break;
                }else if(arr[row][col]>num){
                    col--;
                }else{
                    row++;
                }
            }
        }
        
        return flag;
    }
    public static void main(String[] args) {
        // 测试用例
        int array[][] = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
        boolean flag = find(array, 1);
        System.out.println(flag);
    }
}

 

posted @ 2019-07-27 16:13  沦为旧友  阅读(268)  评论(0编辑  收藏  举报