剑指offer面试题4:二维数组中的查找(java版已在牛客网AC)

题目

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行。每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false.

1	2	8	 9
2	4	9	12
4	7	10	13
6	8	11	15

解题思路

首先选取数组中右上角的数字。如果该数字等于要查找的数字,则查找过程结束;如果该数字大于要查找的数字,则说明该数字所在的一列数字都大于要查找的数字,因此剔除该数字所在的一列数字即列下标减1;如果该数字小于要查找的数字,则说明该数字所在的一行数字都小于要查找的数字,因此剔除该数字呢所在的一行数字哦,即行下标减1。

代码实现(java)

import java.util.Scanner;

/**
 * @author FengTianHao
 * @version 1.0
 * @since 2018/11/30 11:07
 *
 */
public class Test {
    public static Boolean find(int[][] matrix,int number)
    {
        int rows=matrix.length;//获取目标数组的行数
        int colums=matrix[0].length;//获取目标数组的列数
        if((matrix!=null)&&(rows>0)&&(colums>0))//判断目标数组是否为空、行数和列数是否大于0
        {
            int row=0;
            int column=colums-1;//获得数组右上角的坐标matrix[0][coulumn-1]
            while(row<rows&&column>=0)//判断当前元素是否合法即还在数组里面

            {
                if(matrix[row][column]==number)//判断当前元素是否为要查找的元素
                {
                    return true;

                }
                else if(matrix[row][column]>number)//如果当前元素大于要查找的元素则列数减1
                {
                    column=column-1;
                }
                else//如果当前元素小于要找的元素则行数加1
                {
                    row=row+1;
                }
            }
        }
        return false;

    }
    public static void main(String[]args)
    {
        int[][] testMatrix={{1,2,8,9},
                            {2,4,9,12},
                            {4,7,10,13},
                            {6,8,11,15}
                            };
        System.out.println("请输入要查找的数字:");
        Scanner scanner=new Scanner(System.in);
        int test=scanner.nextInt();
        System.out.println(find(testMatrix,test));

    }

}

运行结果

剑指offer面试题4:二维数组中的查找(java版已在牛客网AC)_第1张图片

你可能感兴趣的:(数据结构和算法)