二维数组的查找

来源:互联网 发布:怪物猎人初音捏脸数据 编辑:程序博客网 时间:2024/04/30 04:19

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

思路:充分考虑到该数组行与列递增的特性。
首先选择数组中右上角的数字,如果该数字等于要查的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。
算法如下:

package SwordOffer;/** * Created by L_kanglin on 2017/3/13. */public class Test1 {    public static boolean Find(int target,int [][] array){        //二维数组的行        int rows =array.length;        //二维数组的列        int columns=array[0].length;        boolean Flag=false;        if(array.length!=0 &&rows>0&&columns>0){            int row=0;            int column=columns-1;            //注意这个循环的时机            while(row<rows&&column>=0){                System.out.println("查找前  "+array[row][column]);                if(array[row][column]==target){                    Flag=true;                    break;                }                else if(array[row][column]>target){                    --column;                }                else{                    ++row;                }                System.out.println("查找后  "+array[row][column]);            }        }        return Flag;    }    public static void main(String [] args){        //二维数组的初始化        int [][] num = new int[][]{{0, 1, 2, 3},{4, 5, 6, 7} , {8, 9, 10, 11},{12, 13, 14, 15} };        int target=4;        System.out.println(Find(4,num));    }}

运行结果如下:

查找前  3查找后  7查找前  7查找后  6查找前  6查找后  5查找前  5查找后  4查找前  4true
0 0