前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode刷题(7)——搜索二维矩阵

leetcode刷题(7)——搜索二维矩阵

作者头像
老马的编程之旅
发布2022-06-22 13:25:11
2080
发布2022-06-22 13:25:11
举报
文章被收录于专栏:深入理解Android

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。

示例 1: 输入: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 3 输出: true

示例 2: 输入: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 13 输出: false

思路: 可以观察发现这个二维数组是从左到右,从上到下递增的,所以取右上角数字,进行比较,如果小于目标数,则列进行+1,否则行进行-1,判断条件就是行列下标都大于等于0,于是写出了如下代码:

代码语言:javascript
复制
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        if(matrix==null||matrix.length==0){
            return false;
        }
        int m = matrix.length-1;
        int n = 0;
        while(m>=0&&n>=0){
            if(matrix[m][n]==target){
                return true;
            }
            else if(matrix[m][n]<target){
                n++;
            }else if(matrix[m][n]>target){
                m--;
            }
        }
        return false;
    }
}

发现报错了,因为忽略了可能存在数组角标越界的可能,于是while判断也要考虑边界,于是变成如下代码:

代码语言:javascript
复制
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        if(matrix==null||matrix.length==0){
            return false;
        }
        int m = matrix.length-1;
        int n = 0;
        while(m>=0&&n>=0&&m<=matrix.length-1&&n<=matrix[0].length-1){
            if(matrix[m][n]==target){
                return true;
            }
            else if(matrix[m][n]<target){
                n++;
            }else if(matrix[m][n]>target){
                m--;
            }
        }
        return false;
    }
}

执行通过

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档