算法题-二维数组(杨氏矩阵)中查找一个整数是否存在

本文介绍了如何在遵循特定排序规则的二维数组(杨氏矩阵)中查找一个整数。提供了三种方法:暴力求解、逐行二分查找以及使用二维数组右上角数字作为参考数法。每种方法都有对应的Python和C++实现,并提到了Python中的bisect模块和eval函数在查找算法中的应用。
摘要由CSDN通过智能技术生成

题目描述

  • 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
二维数组实际上就是杨氏矩阵

思路:
这是一个非常常见的问题,总结下来一共三种方式:

  • tips:m为行n为列

1.(暴力求解)两层循环嵌套开始逐个逐行遍历,时间复杂度O(m*n)
2.进化版.把每一行看成有序递增的数组,利用二分查找,通过遍历每一行得到答案,时间复杂度
3.拿二维数组右上角的数做参考值与当前数字进行对比,大之上移,小之右移,时间复杂度O(m+n)
(拿右上角数做参考值同理);(m为行n为列),只有在m行数比列数小很多时二分查找法才优于该方法

  • 二维数组的行越从左向右递增,列从上到下递增,为了寻找一个数可以从二维数组的左下角开始(or右上角),若目标值大于(小于)这个数,则右移(左移);若目标值小于(大于)这个数,则上移(下移),找到了返回True,若遍历结束还未找到该目标整数则返回False;

代码:

方法1.暴力求解
 bool Find(int target, vector<vector<int> > array) {
        int row = array.size();
        int col = array[0].size();
        if(row == 0 || col == 0) return false;
        for(int i = row-1; i >= 0; i--){
            if(array[i][col-1] < target) return false;
            for(int j = 0; j < col; j++){
                if(array[i][j] > target) break;
                if(array[i][j] == target) return true;
            }
        }
        return false;
    }

Python 暴力求解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值