剑指offer----二维数组查找目标值

题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列 都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一 个整数,判断数组中是否含有该整数。
思路:从右上角或左下角开始找,逐行排除,或者用二分法查找
本文采用左下方法0(m+n)

package Function;
//o(m+n) 0(1)
public class Find04 {
    public boolean Find(int [][]matrix,int target) {
        if(matrix==null)
            return false;
        //行数
        int rows = matrix.length;
        //列数
        int cols = matrix[0].length;
        int i = rows - 1, j = 0;
        while (i > 0 && j < cols) {
            //目标小,向上移行
            if (target < matrix[i][j])
                i--;
            //目标大,向右移列
            else if (target > matrix[i][j])
                j++;
            else
                //相等
                return true;
        }
        return false;
    }
    public static void main(String[] args) {
        int [][]arr1=new int[][]{{1,2,8,9}, {2,4,9,12},{4,7,10,13},{6,8,11,15}};
        int [][]arr2={};
        Find04 p=new Find04();
        boolean a =p.Find(arr1,8);
        //查找值小于矩阵最小值
        boolean b=p.Find(arr1,0);
        //查找值大于矩阵最大值
        boolean c=p.Find(arr1,16);
        boolean d =p.Find(arr2,0);
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
    }
}
发布了9 篇原创文章 · 获赞 0 · 访问量 468

猜你喜欢

转载自blog.csdn.net/qq_36113761/article/details/104599853
今日推荐