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

一、题目

在这里插入图片描述

二、思路

从左到右,从上到下,两条路径都是数值从小到大排列,为了确定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;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_35812205/article/details/123607307