美文网首页
剑指Offer——二维数组中的查找

剑指Offer——二维数组中的查找

作者: 瞬铭 | 来源:发表于2019-10-12 12:33 被阅读0次

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

    leetcode类似

    这个题目跟leetcode的题目不太一样,做法也不一样。leetcode 上说明了下一行的第一个数字一定大于上一行的最后一个数字,所以分别对行和列做二分就行,而本题不行

    • 方法一,每一个行和列都做二分
     public boolean Find(int target, int[][] array) {
            for (int row = 0; row < array.length; row++) {
                int left = 0, right = array[row].length - 1;
                while (left <= right) {
                    int mid = (left + right) / 2;
                    if (array[row][mid] == target) {
                        return true;
                    }
    
                    if (array[row][mid] > target) {
                        right = mid - 1;
                    } else {
                        left = mid + 1;
                    }
                }
            }
            return false;
        }
    
    • 方法二:从二维数组的左下角(i,j)开始找,num[i-1,j]一定小于num[i,j],num[i,j+1]一定大于num[i,j]
    public boolean Find2(int target, int[][] array) {
            int i = array.length - 1;
            int j = 0;
            while ((i >= 0) && (j <= array[0].length - 1)) {
                if (array[i][j] == target) {
                    return true;
                }
    
                if (array[i][j] < target) {
                    j++;
                    continue;
                }
    
                if (array[i][j] > target) {
                    i--;
                    continue;
                }
            }
            return false;
        }
    

    相关文章

      网友评论

          本文标题:剑指Offer——二维数组中的查找

          本文链接:https://www.haomeiwen.com/subject/ryrqmctx.html