1 数组查找

题目描述

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


方案一:遍历

求二维数组的行数:array.length

求二维数组的列数:array[i].length

public class Solution {
    public boolean Find(int target, int [][] array) {

        for(int i=0;i<array.length;i++){
            for(int j=0;j<array[i].length;j++){
                if(target==array[i][j]){
                    return true;
                }
            }
        }
        return false;
    }
}

方案二:从右上角开始搜索,如果小于列减1;如果目标值大于该值,行加1

public class Solution {
    public boolean Find(int target, int [][] array) {
        //row为行数-1(下标从0开始)
        int row=array.length;
        int x=0;
        int y=array[0].length-1;
        while(x<row&&y>=0){
            if(target==array[x][y]){
                return true;
            }else if(target<array[x][y]){
                y--;
            }else{
                x++;
                //判断行的值是否超过数组的行数
                if(row==x){
                    return false;
                }else
                    y=array[x].length-1;
            }
        }
        return false;
    }
}
方案二不是最佳方式,但相对于方案一在某些查询中有较大改进,如要查询的数在数组的右下角。


猜你喜欢

转载自blog.csdn.net/iamsunnygirl/article/details/80055972