• 【剑指Offer-数组】面试题4:二维数组中的查找


    题目描述

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

    思路1

    从右上角或者左下角一步一步缩小比较范围。假如从右上角开始,设当前数字(右上角)为cur,要查找的数字为target。如果cur==target,则查找成功;如果cur>target,因为数组中的元素从上到下递增排序,所以当前元素cur所在的这一列就不用比较了(该列元素>=cur>target),将当前元素cur所在列删除;如果cur<target,因为数组元素从左到右递增,则当前元素cur所在的这一行就不用比较了(该行元素<=cur<target),将将当前元素cur所在行删除。更新当前元素cur为查找范围修改后右上角的元素,重复前面的过程,直至查找范围为空。

    代码如下:

    class Solution {
    public:
        bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
            if(matrix.empty() || matrix[0].empty()) return false;
            
            int rows = matrix.size();
            int cols = matrix[0].size();
            int r = 0;
            int c = cols-1;
            while(r<rows && c>=0){
                if(matrix[r][c]==target) return true;
                else if(matrix[r][c]>target){
                    c--;
                }else if(matrix[r][c]<target){
                    r++;
                }
            }
            return false;
        }
    };
    

    思路2

    思路 1 是根据当前的位置是否超过的数组的范围来进行循环的,还可以通过是否找到 target 来进行循环。代码如下:

    class Solution {
    public:
        bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
            if(matrix.empty() || matrix[0].empty()) return false;
    
            int rows = matrix.size();
            int cols = matrix[0].size();
            int r = 0;
            int c = cols-1;
            while(true){ // 这里使用 while(true)
                if(matrix[r][c]==target) return true;
                else if(matrix[r][c]>target){
                    c--;
                    if(c<0) return false;
                }
                else if(matrix[r][c]<target){
                    r++;
                    if(r>=rows) return false;
                }
            }
            return false;
        }
    };
    
  • 相关阅读:
    Python基础04 字典基本操作
    Python基础03 列表、元组基本操作
    Python基础02 字符串基本操作
    Python基础07 函数作用域、嵌套函数、闭包函数、高阶函数及装饰器的理解
    Python随机数random模块学习,并实现生成6位验证码
    Python与时间相关的time、datetime模块的使用
    Python PIL库安装
    Python中可变对象和不可变对象
    Mac环境下Docker及Splash的安装运行教程
    redis 链表(list)操作
  • 原文地址:https://www.cnblogs.com/flix/p/12162392.html
Copyright © 2020-2023  润新知