【力扣-算法面试汇总】3、搜索二维矩阵 II(240)

111 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

搜索二维矩阵 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


输入:

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 =20;

输出:false

来源:LeetCode

【暴力法】

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        for(int i = 0;i<matrix.length;i++){
            if (matrix[i][0]>target){
                return false;
            }
            for(int j = 0;j<matrix[0].length;j++){
                if(matrix[i][j] == target){
                    return true;
                }
                if(matrix[i][j]>target){
                    break;
                }
            }
        }
        return false;
    }
}

图片.png

【排序二叉树思想】

题述中元素从左到右升序,从上到下升序,结构类似于排序二叉树

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        // 从左下角(第0列,最后一行)开始查找, 还可以右上角开始查找
        int col = 0, row = matrix.length - 1;
        while(row >= 0 && col < matrix[0].length){
            // 当target 大于 矩阵中元素的值时,col + 1 ,向右移动
            // 当target 小于矩阵中元素的值时,row - 1 , 向上移动
            if(target > matrix[row][col]){
                col++;
            }else if(target < matrix[row][col]){
                row--;
            }else{
                return true;
            }
        }
        return false;
    }
}

图片.png