[剑指 Offer 第 2 版第 4 题] “二维数组中的查找”做题记录

[剑指 Offer 第 2 版第 4 题] “二维数组中的查找”做题记录

题目描述

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

求解思路与关键

  • 正确的搜索起点是从左下角或者右上角开始搜索,这是因为:
    从下到上,数字越来越小;
    从左到右,数字越来越大。
  • 注意指针没有必要回退,这一点,在下面的代码注释中做了强调。

参考解答

参考解答1

public class Solution {

    public boolean Find(int target, int[][] array) {
        int row = array.length;
        if (row == 0) {
            return false;
        }
        int col = array[0].length;
        // 从左下角开始搜索,先从左到右,再从下到上
        int i = row - 1;

        int j = 0;
        while (i >= 0) {
            while (j < col && array[i][j] < target) {
                j++;
            }
            if (j < col && array[i][j] == target) {
                return true;
            }
            i--;
        }
        return false;
    }

    public static void main(String[] args) {
        int[][] matrix = new int[][]{
                {1, 2, 8, 9},
                {2, 4, 9, 12},
                {4, 7, 10, 13},
                {6, 8, 11, 15}
        };
        Solution solution = new Solution();
        boolean find = solution.Find(16, matrix);
        System.out.println(find);
    }
}

猜你喜欢

转载自blog.csdn.net/lw_power/article/details/80748343