c++怎么实现数字数组的删除数字_漫画:如何在二维数组中找到一个数?

题目描述

给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。

Consider the following matrix:[  [1,   4,  7],  [2,   5,  8],  [3,   6,  9]]Given target = 5, return true.Given target = 20, return false.
d015dd74802e67e54441c80fdedb1207.png
public class Solution {    public boolean Find(int target, int [][] array) {        if(array.length == 0)// 如果二维数组为空,直接返回false            return false;        for(int i=0;i            for(int j=0;j                if(array[i][j] == target )                    return true;            }        }        return false;    }}
c2bb9a5e8f680614784a1a0125069df3.png
7dff4d8d983f4e38c427038c9c8f55cd.png
15eb50349df3514049c0f4fa0de082db.png

788391fd69455803d63a4b957da9fee9.png

a5fd922e093d3ef9fdb912865e5a5692.png
8a2866b771b7c3a7a6d8450dfce5542c.png

比如你要想找数字6,我们从数组矩阵右上角上的数字开始,右上角数字是7,而7>6

760e7374cd39cde9fdcb617581f56d92.png

题目中二维数组的特性是从上到下递增,所以7所在的那列就不必去找了。

e962a2cb07c21fc62e90949f97ed7312.png

将7所在的所在的那列剔除掉,进入到下一列去比较。下一列的右上角是4,4<6

4d5f507907a394e1c6a13ab96ec3bbba.png

而按照二维数组的特性,数组是从左到右递增的,4已经小于6了,那么4左边的数肯定也小于6, 而 4 目前是右上角的数字,所以4所在的行就没必要去比较了。

300d841e636a0d911cc36347cdfb7c81.png

将4所在的行删除掉,进入到下一行。可以看到目前右上角的数字是5了。我们只比较了两次,就已经剔除掉了一行一列了!斗宗强者,恐怖如此!

5bebac2e2bcc32bc3e468b1d552131e4.png

好,继续比较5和6,5由于小于6,按照之前的逻辑所以5所在这行剔除掉,进入到下一行。

4d953ff4b0e5fe5c994043976dbcc105.png
8308c9d81c461963ecb98e4bc2ef2c17.png

而下一行中的右上角是6,最终我们找到了目标数字6。

最后看一下代码实现:

eb56abf088a4778b38c49ba3e7fc4f67.png
Java
c92114359e801d0fe7bece19322966b0.png
JS
e67542e43693a547b4df6663523b8bf6.png
PY
1a7483c0c871363f49120b50f545634f.png
PHP
3312158c4e8c37556cf714ba5df394df.png
C++

这里面有Java、PHP、JS、Python、C++五种实现,妈妈再也不用担心你看不懂其它语言了。为了方便你理解,我还顺便制作了动画的形式。

350f2af9cd7ebe2ae1ded917da990448.gif
f2ce6df7b96862b2dfe41bc6df7265a7.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值