00:00
同学们,我们继续。那么接下来我们就。通过编码来实现一下我们这个算法。按照题目的要求,我从。这个数组里面两个数相加可以得到我们的目标值,它可以请把这个得到,它可以在这两个值数值相加的下边给我返回,那么我们呢,返回呢,就把它放在一个数组里面,完全跟题目一样,何以见得,那么大家请看这一块是不是就是我们的图算,你看人家是不是给你写好了这个方法头了,那么直接拿过来用。OK吧,那么假设我们这个就是一。好的。如果没有我们直接返回一个,那那么接下来。我们就需要按照这个target去判断这两个数字的下标加出来的。那么同学们,通过前面你们的思考,我们应该得到这样的本能的自然反应,为什么?因为大家不再是零基础了哈,我就不再是什么启发性的什么呢?都是平均是两年工作经验的来大厂班的,对吧?那么接下来我们直接明白,凡是宿主是不是应该有一个便利,你躲不掉的对吧?
01:03
那这块numbers length OK,好,我们遍历这个速度。我们来分析这个问题,一步一步的来,我们应该怎么得到,现在他跟你说了。A加B等于C,二加七等于九,你给我得到它们两个的下标,那么我们把这个题目反过来想的话,要得到下标是不是要针对于我们的二?在这个数组里面下标是几七,在这个数组里面下标几,那么我们怎么才能得到二跟七呢?马上展开我们思维,假设我们要。二加七等于九。同学们,我们怎么样得到二,是不是二就等于九减去这个七?那么我们是不是可以拿我们的目标值啊?然后挨个挨个的去两两相减。看看如果减到的。数字就是我们的答案,这个答案对应的这个数字是不是就是我们的下标,然后我们把这个下标返回啊。
02:05
所以说第一种思考很简单,本能的肌肉反应对于宿主就应该是什么。不用我们的变列,那么了不起,所有算法,最简单的所有算法里面是不是有一种东西叫变列,或者也就是我们常说的是不是,是吧?暴力破解这么说能理解,它呢?不见得是性能最好的,但是却是最直接、简单粗暴、有效的,好,我们先尝试着写第一种,这就是为什么我这加个一好,同学们遍历,遍历完了以后干什么。我们希望是不是从。拿着我们的target这个值,从头到尾挨个挨个的减,如果减的是一样的,减的的数,所谓的一样就是里面有我们的范围的值,我们就返回它的下标,所以说呢,我们这再来一个循环,那么也是number.length都在这个范围以内,但是抱歉。
03:05
里面可就是I加上一了,这一波能跟上,那么第零个是这个,那么I加一是不是后面这个,那么数组一个二位数组最基本功了吧,最简单的,那么我们做一件什么事呢?那么如果他给按照我们这这个九现在是不是相当于我们的target的值。OK,我们来做一个判断啊,如果这个target减去我们的number。这个数组里面的。第一个值I值。这一波,同学们。能跟上。刚好等于我们,你看啊,我们这儿说过吗?是不是用减法,那么我们拿这个目标值挨个挨个的去减九,减去二,应该等于什么?是不是七啊,没问题吧,那么如果等于我们的numbers里面的这个勾,这个值,这一波同学们能跟上。
04:06
这就说明是不是它们的下标就是我们正需要的呀?那么return,我们利一个特数组把这两个的值。返回。这两个值的意思就是值,这两个值对应的下标将其返回。好,我们来看看这个算法,同学们给大家一点时间思考一下。都很简单吧,那么大家请看这个是不是暴利。我们讲过了啊,你现在要得到这个九,它是九,九是等于什么?是不是二加七等于九,下标是不是零跟一,那么我们就来判断,我拿九。减掉我们的第一个数是不是二,减掉二了以后,等不等于我们I后面的下一个是不是这个勾,那么九减二是不是等于七,那么是不是符合我们刚才这个说法。
05:01
那只要是值相等,那么是不是?马上把它们对应的值,符合条件的值的下标返回啊。能理解这个算法很简单吧,就是一个普通的暴力法,那么接下来我们呢,都会明白了,那么这是不是in特卖?Index就有这么一个。竖着。能跟上,那么。To。上。有这么一个啊,我们加一个sta,那么把这个方法同学们你懂的再一个。Numbers,这个是target OK吧,那么。接下来这个是不是my index?Element。那么这。Element OK吧,那么我们这主要是强调这个算法,这可能还会有一个烂,还会报个空指针异常,这个我就懒得去做判断了,了不起,你在这做个异不等于烂的话才变列,否则的话打出没有合适的参数啊。OK,重点不是这个难,那么现在同学们,我们一运行你们可以看到效果,九等于二加上七,那么二下边是零。
06:12
七下标11是不是得到我们的结论,那么再来,那么同学们假设现在二加上11是不是等于13啊,那么看看我们这个13能不能获得。那么如果是13的话,是不是应该返回我们的下边是012,我们这个。二加上11等于13,下边是不是零跟二啊,那么再来如果是二加上多少七,或者是什么七加上我们的15呢?那么这个时候是不是我们的22这个数字,那么一样的算法,一样的套路,这个时候是不是得到零,一是七,二三下标是三号值是15,那么就是一跟三这个下标值可以得到,那么所以说同学们这个就是最经典最简单最直接的是吧?
07:00
暴力暴力算法那么几层循环。负循环两个,那么它的思路就是一个。把它给答案呢写一下。是不是通过双重循环变力数组中的所有元素的什么两两组合嘛,请看这个算法本身没什么难的啊,II后面的是不是就是I加I。第一个和身后的一个出现符合的和的时候,返回两个速度的下不要,那么这个时候同学们我们变通一下,符合两个和的话,那么是不是做一个减法,那么所以说同学们只要是判断一样,我们呢就能得出最终的效果,好这个就是我们最简单粗暴,最直观的想法,那么也希望同学们呢,通过这个来。肉肉身。那么下面。如果你写出这个算法以后,那么请大家讨论一下。
08:01
挑挑我的这个毛病,有哪些地方不好好?首先这道题目啊,是立扣的第一题,这种题目难度是简单的,对于一个一为数组。便利这样的你都想不到,那这是不可以的,大厂肯定过不了这一关,那么接下来你写出来说明什么?你是不是第一步,信号是先完成。再说呀,对不对,那么第二步是不是要先完成了以后再完美啊,什么概念同学们,这个东西是做出来了,但是请看看这个算法的时间的复杂度。好不好?那么同学们,我们有几层循环?是不是两层负循环,是不是on的平方啊,那么随着这个数组的。增大,那么这个时候它的性能是不是会急剧下降,所以说你看如果你用这个方法答出来,当然这个方法答出来总比交白卷要好。答出来以后,面试官一定会问你。还没有更优的解法。
09:00
那么同学们思考一下。我们应该怎么来解决?只是说了根据刚才我们也看到它的痛点是不是两层负循环。变裂,那接下来我们是不是最好不要让它是两层负循环,把这个循环。减少,哪怕是减少一层,是不是也挺好啊?那么所以说。我们接下来就要看一下这道题目的最优的解法,那就是哈希查找。
我来说两句