00:00
呃,大家好,今天给大家讲一下这个。坚持offer上的一道三题,第二道题。他说的是在一个二维数组中,每一个一维数组的长度都相同。就是一个正方形的类似啊,正方形的矩阵。每一行都按照从左到右的递增顺序,从上到下的递增顺序。进制数的话,这个的话,这儿可以给我们的一个解题思路,请完成这样一个函数,输入一个二维数组和一个整数,判断这个整数四,我的这个二位数组中。我的思路就是。我们先把这个项目建一下。思路我们可以考虑想一下啊,就是刚才就是刚才那句话,我们也可以用这个思路。绝对是。我们先把这个矩阵写出来啊,比方说我有这样一个二维数组。
01:06
十、11、12。13 14 15 16,好,这是符合条件的,从左到右递增,从上到下递增。我们要找比方说我目标数组,目标数字定的是十目标整数。那么我们怎么样在这个24组中找到这个十呢?从左到右递增,从上到下递增。大家可以发发现啊。我们有一个思路,就是你看这里,我这里是我在我的公众号程序员的时光里面写了一篇文章,详细的讲这道题。从左到右递增,从上到下递增,也就是说我们可以从右上角开始变离,从右上角四或者是从左下角十三都可以。从四寻找寻找到十怎么样寻找?首先。
02:02
如果说目标数组target比这个四大,十明显是比四大,那么。是第一行的是左边的肯定都比较小。那我们就不用看了,直接让他看下一行就行了,所以这里直接让他下移,让它的行加加。好。一直加到加到12的话,四加到12的话,这时我们可以看到目标数字,目标整数比这个12小的话,我们就向左查找左移,因为左边就比较小了,左移只是让它的内减减就OK了。就可以找到这个这个这个四了这个事了。首先它是一个布尔类型的。我们。返回一下。第一个,这是个函数,我们要先对它的参数进行判断。判公。如果它的。
03:05
等于零。那就那就直接放啊。这个R是一个二维次数,R的内置是什么呢?其实就是它的函数啊,函数。如果它函数都等于零,那就根本就。就不行了。这是个空的,第二个我们先把它的右上角的元素将。右上角元素。表示出来。表示出来就是旁。肉。右上角第一行就是零啊。对。
04:01
那个怎么想,那应该就是它的二维数组的列数。减一二位数的类似怎么表达,其实就是。零。点认识。建议的。点认是表示它的行数,零其实就是一位数组,一位数就是它的第一行,其实就是二位数组的第一行就是类就是一位数组。再加一个点,其实就是它的长度,也就是二位数的内数啊。也就是二维数组类数减一的话,因为这里它是它是数组的下标嘛,下标从零开始肯定要减一的啊。这是我们直接循环。变力,循环变力这个数组是否有这个整数?便利条件,我们可以想一下便利条件是什么,我们是它的行从零开始,便利条件它的行从零开始一直往上加,怎么样?
05:07
让它的行直接小于,怎么样让它的行有一个限制,就是小于它的行数。小于二位数的函数。二位数的函数是怎么表达?就是这个啊,就是这个。可不可以等的?肯定是可以等的。还有就是。累。这怎么样表达?内这里的话是二位数是内数减一就是。第234这个类,然后它的类似表达意义就是其实就是小大于零就可以了。大于等于零啊。
06:00
可以的,因为它是速度下表满你。它是数组的下标可以等于零啊,这就是循环的条件,这个要记住,因为我们你可以打打个比方,从四开始,四它的函数。零三对不对。行是林,内是三。那么我要往下寻找它的行,又加一八就是一三。一加一的话,你知道这个函数要小于等于它的。函数就是四。小于。等于它的函数啊。023023。这里是大于等于零的啊。然后我们就是这里就直接进行判断就行了。如果他的目标函数。等于我们要查找的这个。
07:03
那就直接返回就行了,直接返回。往回出就行了。这里改一下啊。还有。如果。目标是?比较大。目标速度比较大。那么。一般速度就是10比4大,只让它的行加一行加加就行了。行是说。行家就可以了。然后最后一个。让它内减减行加加加到12的话。
08:01
我们让他左移Z减减。这样曲子就就可以查找出来了啊。我们把这个。来这里试一下啊。问题。看一下啊这个。他说是。十六一二三四。这个应该是。看一下啊,这个有问题啊,刚才应该说说说的是对的,这里应该是要减一的啊,我说刚才怎么应该它的类数行数明显是0123是不能的,呃,是要减一的啊,是不能等于它这个。
09:13
很简易的。内数是可以等于零的啊,因为它的速度下标慢。这里的话减一,我们看一下吧。这个。建议。内存减一啊,我们这里看一下怎么进行测试啊。测试的话也很简单。首先。它题目中出的是输入这样一个二位数和一个整数输入,我们要从键盘输入。从键盘输入的话,要填这个类。
10:07
然后我们怎么样从键盘输入到这个,首先要输入一个二维数组,输入二维数组。怎么输一个二位数的。Either。AB就是它的行内数啊,输入这组,输入二维数组,AB代表行二维数组的行数和类数。这直接等就行了,直接。等于it吧。B等于。是一样的。输入二维数组行列数,然后我们再输入具体的二维数组。
11:08
怎么样实施治理?二维四组用一个。这里用一个for循for循环啊看一下。这里是一个二维。大家好,这样我们。这里啊,我们有二位数的行列数,行数和列数,我们直接定义就行了。A。For循环I等于。N小于。
12:01
要小于它的小于行数。哎,佳佳。J。J小于它的列数。接佳佳。直接判断。是否等?嗯。错了,刚才不好意思啊。这个是输入,我们输入二位数的行数,常数和类数,然后定义之后,这时我们在。
13:02
这是就是输入具体的二维数组。我先输,第一次输入行数列,第二次输入具体的二位次数。这个时候我们就应该,这里就应该等于我们主体,是的,等。输入这角二维数字之后,我们这个时候就是要输入。目标值。那么此时我们怎么样进行检验呢?这里大家可以这样直接。我们如果我们这里直接输出的话,直接调用这个函数方法啊这里。
14:01
可直接调用这个。Target。Rain。这的话,它其实只能检验一次,只只能检验一次。我们这里一个循环啊。你放小了。这里它要循环多少次呢?I等于零的话。大家想想,我们这个循环多少次?行数和列数。每一行一位次数长度都相等。这里应该是小于。行数乘以类组啊,小值值值小。A乘B就行了。可以的,可以的。Editor。
15:01
这里就是循环16次,循环16次。可以测试一下。这里改一下吧。改一下,可能会看的直观一点。再运行一下。
16:08
吃了。比方说是函数是四,内数十四。主体的二维数组。1234。678。90、11、12。13、14、15、16。十目标值十。有的,你看我输了多少次,这是第一次。第二次。第三次,四次。次六次。七次八次,九次、十次。十已经输了。11次,12次,13次,十,14次。15次,16次。啊,这17号。没有,他已经结束了啊,只能是16次,17次。
17:09
其实这已经已经结束了,当然还有还有一种很很很好的方法。是,这是法一法二的话就是。法的话也很简单啊。就是我们。我们大家都会想到的方法。直接用。两个for循环直接解决啊。直接用两个破行吗?第一个是。要小于它的行数。
18:11
娇娇。第二个循环是。小特类属。那时候就是用。谢谢大家。直接判断啊。直接分了。直接直接循环。那个。可以了。
19:02
这加个隐隐。他打。七等force。大家可以看一下这一个,我用的是。走,这时候三三行。二三。八九。
20:01
13。对,后面后面应该也有也有可以啊。这个更简单啊,这个它时间复杂度应该是。应该是。I乘以Z的。两个负小I乘以Z,这个应该是。这应该是相加啊,这个方法应该是相加。就是。应该是类似于爱加接这种爱加机制。这个题就就就说到这儿了。这里都有,这里我写的都有,请大家关注我的微信公众号,有详细的。经济收入和。过程啊。谢谢大家啊。
我来说两句