【LeetCode剑指offer04】二维数组中的查找(简单数学)

举报
野猪佩奇996 发表于 2022/03/21 23:27:54 2022/03/21
1.1k+ 0 0
【摘要】 一、题目 二、思路 从左到右,从上到下,两条路径都是数值从小到大排列,为了确定target是否存在,可以换个起点开始,如从右上角(其实从左下角开始也行),这时候就很神奇了: 如果当前值比targ...

一、题目

在这里插入图片描述

二、思路

从左到右,从上到下,两条路径都是数值从小到大排列,为了确定target是否存在,可以换个起点开始,如从右上角(其实从左下角开始也行),这时候就很神奇了:

  • 如果当前值比target大,就不能继续往下走(只会越来越大),而往左边走,值会变小,进一步靠近可能的target
  • 如果当前值比target小,就不能往左边走了(只会越来越小),而往下面走,值会变大,进一步靠近可能的target

另外注意细节,一开始判断matrix二维数组是否为空,如果为空则matrix.size() == 0,而此时还matrix[0].size()取列数是会报错越界的,所以不要先取行数列数再判空。

三、代码

class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        if(matrix.size() == 0 || matrix[0].size() == 0) return false;
        int row = matrix.size(), col = matrix[0].size();
        //设置初始点在右上角
        int i = 0, j = col - 1;
        while(i <= row - 1 && j >= 0){
            if(matrix[i][j] == target){
                return true;
            }else if(matrix[i][j] > target){
                //往左边走
                j--;
            }else{//当前值小于目标值时,不能往左边走了,否则更小
                //往下走
                i++;
            }
        }
        return false;
    }
};

  
 

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/123607307

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。