[剑指Offer]笔记1.二维数组中的查找 C++实现

Problem Description

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

Mentality

本题围绕数组进行查找操作,最简单暴力的方法是遍历,在此基础上提出改进,减少比较次数:

  1. 首先与每行的最后一列的数字比较

  2. 若比最后一列的数字大,则与下一行的最后一列数字比较

  3. 否则与当前行的前一列数字比较

Other Details

  1. 传入的数组参数为vector<vector > array,获取其行大小:
    int row = array.size();
    获取其列大小,可先指定某行,如第一行,再获取该行的大小,即为列大小:
    int col = array[0].size();
  2. 可先判断需要寻找的target值是否在数组内
  3. 可先判断传入的数组是否为空

Code (C++)

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int row = array.size();
        int col = array[0].size();
        if(row==0 || col==0)
            return false;
        if(target < array[0][0] || target > array[row-1][col-1])
            return false;
        
        int i = 0,j = col-1;
        while(i < row && j >= 0){
            if(array[i][j] > target)
                j--;
            else if(array[i][j] < target)
                i++;
            else
                return true;
        }
        return false;
    }
};

已通过所有的测试用例,欢迎指正批评(´▽`ʃ♡ƪ)

发布了19 篇原创文章 · 获赞 10 · 访问量 1201

猜你喜欢

转载自blog.csdn.net/qq_38655181/article/details/105210924