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

2019-10-12  本文已影响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;
    }
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;
    }
上一篇 下一篇

猜你喜欢

热点阅读