其他分享
首页 > 其他分享> > 312,搜索二维矩阵 II

312,搜索二维矩阵 II

作者:互联网

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:

示例:

现有矩阵 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]

]

给定 target = 5,返回 true。

给定 target = 20,返回 false。

答案:

 1public boolean searchMatrix(int[][] matrix, int target) {
2    if (matrix == null || matrix.length < 1 || matrix[0].length < 1) {
3        return false;
4    }
5    int col = matrix[0].length - 1;//列
6    int row = 0;//行
7    while (col >= 0 && row <= matrix.length - 1) {
8        if (target == matrix[row][col]) {
9            return true;
10        } else if (target < matrix[row][col]) {
11            col--;
12        } else if (target > matrix[row][col]) {
13            row++;
14        }
15    }
16    return false;
17}

解析:

因为矩阵的行和列都是排过序的,从右上角开始找,如果当前值比要找的值大则往前一列开始找,如果当前值比要找的值小则往下一行找,如果等于则直接返回。当然我们还可以从左下角开始找,代码如下

 1public boolean searchMatrix(int[][] matrix, int target) {
2    if (matrix == null || matrix.length < 1 || matrix[0].length < 1) {
3        return false;
4    }
5    int col = 0;//列
6    int row = matrix.length - 1;//行
7    while (row >= 0 && col <= matrix[0].length - 1) {
8        if (target == matrix[row][col]) {
9            return true;
10        } else if (target < matrix[row][col]) {
11            row--;
12        } else if (target > matrix[row][col]) {
13            col++;
14        }
15    }
16    return false;
17}

那么能不能从左上角开始走呢,也可以,但代码可能就有点复杂了,因为可能会出现往回走的情况,所以不如上面两种方法简单。这里有个规律,就是当前值是小于他右边的同时又是小于他下边的,所以任何一个值都会小于他右下角的值而大于他左上角的值(如果有),对于任何一个值,和他的左下角以及右上角的值是没法判断大小的。

标签:return,matrix,int,312,矩阵,II,target,col,row
来源: https://blog.51cto.com/u_4774266/2902538