剑指offer_刷题记录_4二维数组中的查找

题目描述:给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
举例:
Consider the following matrix:
[
//每一行从左到右递增排序
//每一列从上到下也是递增排序
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
Given target = 5, return true.
Given target = 20, return false.
思路

  • 在一个矩阵中查找一个数,也就是相当于和矩阵中的数作比较,相等,就返回这个数。
  • 从这个矩阵中,我们可以发现一些规律。数值大的数字一定在矩阵的右下角,数值小的数字一定在矩阵的左上角。
  • 我们从右上角开始遍历,如果目标值比matirx[r][c]中的数字大,那么一定在下一行,如果目标值比matirx[r][c]中的数字小,那么一定在前一列。
    代码实现:
public class Solution {
    public boolean Find(int target, int[][] matrix) {
    //判断矩阵是否为空
    if (matrix == null || matrix.length == 0 || matrix[0].length == 0)
            return false;
            //定义矩阵的行和列
        int rows = matrix.length, cols = matrix[0].length;
        //初始化行,列为倒叙,意为从右上角开始遍历
        int r = 0, c = cols - 1; // 从右上角开始
        //开始循环,设置r和c的范围
        while (r <= rows - 1 && c >= 0) {
            if (target == matrix[r][c])
                return true;
                //目标值大,则在下一行继续index
            else if (target > matrix[r][c])
            //目标值小,则向前一行检索
                r++;
            else
                c--;
        }
        return false;
    }
}

你可能感兴趣的:(剑指offer)