二维数组每行每列有顺序(每个数仅出现一次),快速查找某个数所在位置(思维)

这篇博客探讨了一种二维数组中查找特定值x的高效算法。由于数组每行每列有序,可以从右上角或左下角开始搜索。当遇到值大于x的行首或值小于x的行尾时,排除该行;同理,遇到列头大于x或列尾小于x的情况排除该列。通过这样的方式,能在O(n+m)的时间复杂度内找到目标位置。这种方法适用于有序矩阵的快速查找问题。
摘要由CSDN通过智能技术生成

今天学到一个不错的题~
记录一下~

题目:
给定一个二维数组,数组里的值每一行和每一列都是按从小到大的顺序排放,且每个数仅出现一次,如何在O(n+m)的时间里快速查找到某个值x所在的位置呢?

下面给出一些思路:
首先,由于每行每列都按照从小到大的顺序排列,所以:
我们要先知道这个前提:
若某行的第一个位置的值大于x,说明x一定不在这一行上;若某行的最后一个位置的值小于x,说明x一定不在这一行上;
同理,若某一列的最上面那个位置的值大于x,说明x一定不在这一列上;若某一列的最下面那个位置的值小于x,说明x一定不在这一列上;

了解了这个以后我们就要想办法从哪个位置出发可以在O(n+m)的时间里找到x所在位置呢?

先思考一下~

当我们可以成功满足行列的查找规律(一个判断大于一个判断小于)时我们就可以快速找到位置啦,所以我们可以从二维数组的右上角或者是左下角出发开始寻找。
下面举个例子:
在这里插入图片描述
在这里插入图片描述
所以我们在判断时只需要记录一下移动位置就可以在O(n+m)的时间里成功找到啦~
代码略,挺简单的……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值