00:00
好,这节课我们来学习手写子节点更新策略啊。就是我要我们要把之前咱们讲的什么新新钱旧钱啊那些东西反映在代码上。好,我们还是老规矩,先看一下原来的啊,人家是怎么写的这块啊。好在it这个里头,Init里头呢,这块就有一个叫update children,对吧。Update children这里头你看一看这些命名你就发现了。是不是什么旧前新前后新前旧前啊,这是旧后呃旧前对吧?哎,这个那他这里头有序号也有节点啊,序号就指的是你就前指针指向的位置,然后节点呢,就指的是那个节点对吧?哎,然后这里头呢,就开始便利,你看这循环条件你是不是见过呀,这个循环条件咱们之前的课程当中已经给大家讲解过了。
01:01
对吧,然后这里就开始判断了啊,就各种判断啊,判断旧呃,就是旧钱与新钱是不是一样的,然后判断新钱与呃,判断旧后与今后是不一样的,然后再判断旧前与新后一样不一样,然后再判断新后与旧前一样不一样,发现了吗?对吧,然后如果都不一样的话,那应该怎么怎么样啊,就可能需要去涉及到寻找了啊,需要干嘛的了啊,他这个里没有涉及寻找,它实际上是做了一个就是map做了一个缓存啊记录,哎,但是也行啊,咱们一会可能会用for循环去写一个查找,让大家就更能理解啊,更能理解就只要把它的核心弄懂就可以了啊。好了,那咱们现在呢,咱们就可以写这个函数了,老师带着你写啊,那带着大家写这个函数的情况下呢,就写到这,哎,就是刚才咱们说最复杂的这个情况,就在这老的有children对吧?哎,旧的也有children啊,老的有children,然后新的也有children,那么此时就是最复杂的情况。
02:06
那怎么办呢?对,那这个时候我们就要去给他封装一个update啊update children这个方法对不对,那我们就新建一个叫做update children点啊JS这个方法,那我们现在向外暴露expert default function叫update children这个方法,那这个方法呢,实际上它要提供几个参数,第一个参数呢,是要提供负节点。啊,因为一会儿我移动啊,什么更新啊,都需要负节点对吧,第二个呢是需要老的子元素,第三个呢,是需要新的子元素,这个CH就表示呃子元素的意思这样的,那这边的话我就可以去引入它了。哎,不对。
03:00
哎,就需要引入它了啊,然后在这里呢,就掉。好调,那负节点是谁啊?负节点是谁啊?负节点就是你当前,因为你在这里不是正在。正在这个pat v脑的吗。对吧,哎,你得派,所以这里的这个EL就是你当前的这个,呃,老节点的em。就可以了,因为他俩是一样的节点,是同一个节点,所以新节点的em和O的em是一个em。所以我就在这里就用O的啊,这个v node的em传进去就行。对吧,哎,然后接下来的话,我就可以去传老的这个这个这个这个这个这个节点就是old v node的children。啊,把这个数组传进去,还有new weno的children。哎,就传进去就行,那么这个呢,就是update这个children,那接下来的话,我就可以去给他输出,我是update children对吧,然后我们把这。
04:06
两个都印出来,这是old,这是new。就可以了,然后我们这块测试呢,变成ABC,然后这块呢,咱们简单一点啊,就变成CD。啊,他不是一会都命中吗?就是a ABB CC都命中,然后DD啊加个D。发现了吗?哎,就是圈一命中啊,那这样的话一点它是没有用的,但是在这里呢,输出了对吧,输出的话我们把之前的所有cons.log都给注掉啊。就不要了,之前的所有councillo都不要掉,都不要了。哎,好了,那这样的话我们就一点就OK了啊children我看看啊。这样哎就OK了,就更新了。一点啊,咱们把是不是同一个节点,我们都给它干掉。这个注释啊,都给他干掉啊,这个就不干了,或者这这样咱们注释还是留着,因为这不是康子聊聊馆还是恢复啊,这样的话,咱们同学点击的时候就知道他在内部在做什么,对吧?哎,这样也挺好啊一点,那这个时候你就会发现他要把这个虚拟节点变成这个虚拟节点。
05:17
那是不是咱们就开始愉快的旅程了啊,开始按咱们那个那个策略去书写了,对吧?哎,那这里呢,这就需要先把变量就给它打啊打出来啊把这个变量那首先呢是呃,旧的啊,旧的这个旧的这个开始的节点啊。就这些对吧,旧钱啊。好,咱们叫old start idx等于零。好,然后是新钱。哎,一定要认真仔细啊,心钱那就是拗。对吧,哎,然后是旧后。
06:08
好,那它就等于我们现在传入的这个O的CH的Les减一。他不是最后一个吗?对吧,哎,身后。好,哎,然后呢,这个都是编号,但是接下来我们是不是除了有编号,我们还需要有真正的节点。明白吗?哎,我还需要有真正的一个,呃,真正的一个节点啊,所以这个时候我们就开始写一个就是真正的就前节点。哎,叫old start meo的啊,好的好,那它就等于什么,是不是就等于你原来这个数列中第零项。
07:02
好,那么就前节点有了就要有就后节点。好,最后节点呢,就指的是你这里的这一项。然后接下来就是新前节点与新后节点。好,那这里就是拗。这里呢,也是尿。六。六。好,他就开始了,对吧,那现在呢,我们可以输出测试一下。啊,其实也不用测试,应该没什么毛病,咱们拿旧前与新后来测试一下吧。刷新点一下零和三是对的啊,因为新后是0123嘛,对吧。哎,这样子的这块千万别写错,写错的话就后边就完全崩了啊,千万别写错。好,对了,然后接下来呢,就要开始咱们的一个大的while语句了,开始大ma了啊,While就当我的start I DX还是小于等于我们的old的and I DX的时候,并且我们的new start。
08:13
IDX也小于等于new n的IDX的时候,那这个时候我要干什么呢?对,我现在就需要开始去走,那这个循环语句现在是死循环的啊,你刷新它就死循环了。啊,一刷新它死循环了,你看就死了,哎,就死了关都关不上了啊,那这个时候没关系啊,死循环的话,那是因为咱们的指针没有移动。明白吗?哎,指针没有移动,那指针没有移动的话,我们就可以让它移动啊。对吧,哎,我们就以移动,那这个时候咱们就可以一点一点去想,首先呢,我们先把判断他们是不是同一个节点啊,咱们封装成函数叫check。Same啊啊这个呃,拆个same bno的吧,啊,那这个时候我们就是AB啊,那他这个时候只要返回A的cell要等于B的cell,并且A的K要等于B的K对吧。
09:11
这个函数啊,因为它这个就很方便。好,咱们之前写这儿的时候没有用这个函数,没关系啊,咱们在这儿引进这个函数叫判断是否是同一个虚拟节点啊,判断是否是同一个虚拟节点,那咱们现在你看就可以引导他做,因为一上来。这个AA咱们一上来就知道AA是相同的,咱们就按照咱们测试用例写,你就能写出来。对吧,一上来AA是相同的呀,BB也相同,所以咱就引导他。明白吗?你就引导他就可以了。啊,引引引导他,那这个时候怎么办呢?那你就可以去判断,就是如果我们check same reno的什么呢?就是你的老的这个开始节点啊,Old start beno和你新的new start beno,它是相同的。
10:00
啊,那么这个时候怎么办呢?对相同的话,是不是这个时候就只需要对比他们就行了。对比的话,咱们是不是已经写过那个patch patch window not就可以继续patch了,Patch就指的是对比啊,对吧?哎,就是对比同一个虚拟节点啊,它已经保证是同一个虚拟节点了,然后这里头呢,已经用递归的方法,咱们已经说过了啊,就这里头的话已经是啊在比较什么文本啊,什么什么内容啊,都已经开始了。对吧,所以说这几个文件之间是有一个互相引用的关系的啊,就是pat vno的这里头我就需要,因为你看veno,虽然这里有一个update,就是为什么update拆会运行。是不是因为PA veno的调用了这个函数,而update的这个children里头呢,又会调用它,就它俩是来回调啊,但它来回调不意味着死循环,因为指针走完之后不就不掉了吗?对吧,所以这就是这个编程者的一个牛逼之处啊,就他思路非常的清楚啊,就是一开始写这份代码的那个人很很清楚对吧,但是这个这个函数咱们写的时候是没有这个update children的,是老师引导你写的,所以说建议大家自己一定要动手写,动手写的话你就能明白这两个文件为什么要互相引用了啊。
11:15
哎,为什么要互相引用你都能明白,但是如果说你不动手写,你光听,那你是肯定听不听不懂的啊,那你是肯定听不懂的。好点JS把它给引进来啊,叫pat veno的啊把这个节点对吧,哎,Pat veno的点JS。啊,没问题,排window page window,那这样的话我是不是就可以对比这两个节点了。没问题吧,对吧,我就就就就去把old start veno和。New startno的,我们就可以对比一下。啊,就对比出来,对比出来之后呢,这个时候我就可以让old start benode呢,是不是就可以等于啊,当然我要先让它后移对吧?哎,让它当指针后移的话,他可以写在一条语句上,就是这也是原文件这么写的。
12:04
啊,把加加写在前头,是不是表示的是指针先后移,然后再用啊,对吧,先把idx后移,然后用啊,那就把设成了新的。是吧,哎,然后这个new的start是比较后移,咱们刚才在PPT上已经讲过了,就是新钱和旧钱如果命中的话,那么这个时候指针都要后移的。对吧,哎,指针在这里都需要后移的,在这里都需要在这里后移的啊。是这样子的啊,在这里都需要后移,发现了吗?都需要后移呀。哎,那这个时候的话,咱们尽量把这个D先删掉啊,因为这个D是不存在,所以这个这样的话它就没有死循环了,ABC不都存在吗?对吧?哎,起码这样一点它就不会死循环了。啊,真的吗?咱们拭目以待,咱们看一下8080,哎,你看一点,哎,它不死,诶还是死循环,还是死循环,咱们看看为什么啊,最后old start,嗯,排斥。
13:00
拍,我们看一下它是哪哪哪死循环。啊,此时就不应该死循环了啊。看一下哪死循环8080刷新点。诶,没死循环啊,刚才是自动更新啊,咱把自动保存给去掉,刚才没有没有死循环你看。一点没问题吧。对吧,那这个时候它没有发生变化,那如果这里头有变化呢,比如说ABC改成AABC了,那一点它是不是就变成ABC了。你有没有觉得他很幸福,就是你有没有觉得突然间自己跟一个大牛似的是吧?哎,突然间这个逻辑就能写出来一点了,是这样的,就是只要你动手去写了,那么他一定会给你一些对吧?哎,会,只要你自己动手去写了,那么他一定就是会给你一些你想要的东西。那这里的子节点当然也能创建出来,因为我们这个函数已经写完了,就是派veno,就是咱们写程序是先苦填,一开始苦的地方就已经过去了,就这个PA veno的不是已经写完了吗?当时写的时候吭哧吭哧的。
14:08
对吧,哎,写的时候吭哧吭哧的啊,然后派比no的这个已经过去了,所以所以大家大家能理解了吧,哎,就这个子节点就一定能行啊,所以咱们试试子节点啊,比如这个力里头又有一个又有三个P啊,他一定可以都不用试,因为你那个写完了对吧,哎,哈哈,逗号。嘻嘻,对吧,哎,然后么么哒啊,他这个就已经写完了,咱们看一下一点,这不都都都能换吗。对吧,因为你的veno的就已经写完了,你这三个P,一个P2个P3个P,哎,Patch这个东西就已经写完了这个东西。对吧,哎,是这样子的。啊,所以所以就相当于这是监控,但是咱们现在如果说你再加个D,那就废了。你在这里加个D那就废了啊,我先把这子节点去了啊,诶把这子电换成AA,这加个D你就死循环了,为什么呢?你看一加D就死循环了,死循环了。
15:06
死循环了已经啊为什么因为你循环诶没死循环啊,因为啊,诶没死循环的原因是什么?我看看哦,因为你的指针还是能往下走一个,就左边这个遍历完了,超了ABC遍历完了,但是如果比如说你这个C删了完了,那就没了,真没了,这回真死循环了,刷新看一下。阿四就完了。点不了了。点不了了。哎,他看看赶紧看,哎,好了。就相当于什么呢?因为你现在这个没有全都自洽,你懂吗?就是你得全都自洽,把这边全都自洽掉,那他才能他才能就是。就都是写好了。明白吧,哎,他这个是钱,然后或者换句话说,你一上来这个A就不匹配,那那那不一定死循环了吗?一上来来一个T。对吧,那那肯定死循环了,因为一上来就不匹配,不匹配的话这衣服不匹配,不匹配的话指针不后移啊。对吧,那就不用说了,一定是死循环了,咱们看一下啊。
16:03
你看我1.4句话。啊,你们可能看不出来死循环,但是老师电脑这就点不了了,诶点两下才能关,就说明死循环了。啊,就说明死循环了,明白吧,哎,那这样咱们输出五角星吧。啊,输出五角星,如果五角星一直在输出,就说明死循环了,对不对,好,那咱们现在来看一下一点,是不是五角星一直在输出啊。啊,是因为你这个指针没有往下走,所以这个时候我们就需要对继续往后一点一点的,就需要去写出来,好,然后咱们注意啊,这是一开始是不是新钱和旧钱。然后接下来if是两个后。好,新后与旧后啊。哎,是两个后。好两个后的话呢,那这块我就需要去对比的是old的n veno的和new n venode。
17:04
对吧,哎,摁window的啊,然后这样的话。啊,O的N的venode和new n的venode啊,我们把它给放在这,把它给放在这,那这个值是不是还是old的,但这个指针是简简的。因为咱们说过就是。呃,结束指针就是摁的这个指针,它是指后移啊,不不不不不不不不不不只往上移,就是不往下移,所以这块都是减减的。对吧,希望没写错吧,咱们看一下啊,现在检查的是后。O的后和新的后啊,然后我们现在要对比新的后这个后对吧?哎,咱们可以输出啊,输出命中啊。对吧,咱们现在输出新钱和旧钱民中。或者咱们就输出一一命中对吧,一不就是新钱旧钱命中吗?把这个一加上,PPT上的一加上。然后这是二。二的话就是新后与旧后命中,咱把这个PPT上的那个编号咱们都写上,那这样的话咱们看一下刚才啊,哎哟死循环了。
18:11
啊,这样abcd啊这样看一下。刷新这死着循环的啊,好这回好了,看一下一点是不是都是一命中啊,因为它是这个命中就走下,这个命中走下吗?明白吗?它是l if,所以一个命中就不再判断了。懂了吧,哎这样,但是呢,他也可能不命中,比如说咱们现在不是有后命中了吗?就是一上来,比如说这是A,这是C了。看见没有,然后这是A,那是不是一上来就会进行一个这样会死循环吗?看看哎,死循环了,因为你没有别的情况。对吧,但是一上来是个后命中。啊,但是你还没来得及输入后命中,你就已经,诶为什么还没来得及输后命中啊。哦,可能输出了,它没有显示啊。后命中对吧。
19:00
这难道写错了old啊?千万不要,不要写错old等于old啊,这真写错了。对吧,然后这个new等于new达,这刚才幸亏我发现了。啊,非常抱歉啊,这是等于拗的对吧,哎,这块笔误啊。好,我说呢,怎么因为这个不应该死循环,他应该能后命中一点,诶是后命中,但也没输出后命中啊。看看啊,还是有不错。这一上来CBA,然后现在变成ABC,他应该是哦后命中我哎呀我就懵了,他是不是后和这个后命中啊,对吧,这样啊,然后这个咱们来个乱七八糟。对吧,哎,然后后和后命中啊,这样不就后和后命中吗?这样就OK了,但是也会死循环,但是他起码会输出一个二后命中。千万别乱啊,这块千万别乱,只要别乱那就OK。好点一下,哎,后命中是吧,来个后命中。行了啊,所以你发没发现老师是宁肯死循环我也要测试,我一死循环我电脑就开始那个风扇狂转啊,但是宁肯死循环我也要测试,这样的话能保证咱们书写的代码呢是对的,因为你书写代码的时候,你不可能奢求说我出一口仙气,这代码就写出来了,那怎么可能呢?
20:16
对吧?哎,幸亏刚才查出来了这个new CI,这有错。看见了吧,哎,然后接下来的话就是这啊,我们就开始判断的是就诶什么来着。啊,判断新后与旧前。好吧,哎,新后与旧前啊。新后与旧前。哎,就钱。对吧,哎,所以说这是旧钱。啊,然后这是旧后。今后。哎,然后派出这两个。啊,这是3000万别乱啊,千万别乱,因为这块很容易乱。
21:01
好把这个放进去,这个放进去啊,先后就前对,然后要移动这两个指针啊,要移动的是什么呢?要移动的是,呃,刚才这是start,这俩是N对吧,但是这回变了,变成old的start和new end,那old start变成什么了呢?Old,这个start。要变成什么了呢?他是不是这块要因为老指针是old star的IDX引发的,所以这块应该加加。Old start I DX。明白吗?因为你命中的时候是这两个命中,所以old star的,而star的一定是加加的,然后摁的一定是减减的,所以这里头要给它改成IDX啊,这块要减减的。这样子的就是new n的,然后idx对吧,但是这块呢,还涉及到一个移动节点。他要把所有的节点是不是要移动到,移动到当前这个节点的那个,就是所有圈三咱们看一看是什么。
22:03
圈三的情况是不是要移动到所有后面呀。能理解吗?要把这个节点移动到后面去。所以这块一定要做一个插入,你要不做插入的话,这块是没办法的,圈二三命不了重的。懂吧,哎,所以这块呢,要进行一个插入啊,然后插入的这条节点是先对比还是在插入,咱们大家想想啊,其实都行,因为你对比是对比它内部的这个东西,然后插入啊,就是插入咱们把这写一下啊,把这个PPT上的文字写下,就是当三命中的时候,直接复制到咱们代码中。这块思路一定要非常清晰啊,当新后与旧前命中的时候,要移动节点啊。那移动节点的话呢啊,你可以写在后边啊,就移动节点写在后边都行,都无所谓,但是先移动吧,啊这都可以的,移动节点的话怎么办呢。我现在就需要让咱们的parent这个这个东西对吧,我是不是要去插入节点了。这个大家能理解吧,我现在的目标是什么?要插入节点啊,我现在的目标就是要在这里,呃,插入节点就是我要去给他进行一个呃,Insert before啊,我要去给他进行个insert before。
23:13
哎,那iner before,我们现在就需要来了。Insert。比数好,那你现在要插入新节点,插入的新节点,嗯。新节点是不是还没有创建出来,所以你还得创建那个,你还得用这个create这个节点啊,你create element这个函数,咱们说过是先苦后甜。对吧,Create element就可以使用了,就可以把这个节点啊,把这个JS,因为这个JS不就是把虚拟节点创建成盗墓嘛,然后返回,这是咱们之前的小视频当中我们去讲解的。没问题吧,哎,之前小视频中去讲解的,然后那这样的话,这个create element,那这个的话,这个create element的话,我们就需要在这里创建。
24:04
啊,在这创建创建,因为我先调它创建嘛,创建谁呢?创建的话是不是你的,呃,你现在new start指向的那个节点。对吧,因为你是新后与旧前命中。对吧,哎,新后啊与这个新后与旧前命中。我看看啊,新语旧前命中,新后语旧前命中,那你现在应该创建的是旧哦不对,新后语旧前命中,你是不是应该把。嗯,就前那个节点给它创建出来,就前这个节点。就前这个节点给它创建出来insert before。因此before,哦,这个节点是移动不用创建,不用创建啊,这块不用创建。因为你看啊,当这个圈三命中的时候。啊,圈三命中的时候。啊,他这个时候对对,他这个时候这个节点已经存在了,所以不用不用去写这个情况,所以它是什么呀,它是不是就是old start的那个vnode的elm,它已经存在了,移动过去就行。
25:09
好吧,然后插到哪里呢?对,插到咱们现在old的end的后边一个兄弟就是old。啊的啊。End endnode的next sibling上。对吧,哎的em啊。的next c0上next的C灵,就是我们要在他的下一个兄弟之前。啊,那S。那个的sibling。哎,OK了,这样写。啊,我们要给它插入到这是这种情况。啊,但是对不对的话,这个这个还得一会大量测试,就这个测试很难,这个测试确实相当难啊,兄弟们,这个测试相当难哎。就是什么意思呢?就是它有些有些东西确实不好测试啊,有的东西好测试是吧,诶这CB不要加员工号,这是属性。
26:01
好,然后就差最后一种情况了,最后一种情况就是新前与旧后。是啊。哎,新前与旧后来进行命中。啊,所以这块是就后。这块是新钱。对吧,哎,我们要这么写啊,新前旧后这样写,然后我们现在就派。新前与旧后,然后要移动啊,就是当四新前与旧后命中的时候,要怎么样,咱们要把这个PPT粘上来。炸。对吧,此时是不是要移动指向的这个节点,那指向的这个节点是不是就新前这个节点要移动到啊,咱们旧前的前面。所以这块呢,就是呃,Iner的before啊,所以刚才这个是插到就后的后面,其实就是也是就后下一个兄弟节点之前嘛,对吧,为什么没用aend child,因为aend child指的是所有子元素的这个前头啊,它旧后不一定是最后一个子元素,所以这块也得用in色比before啊,不能用child,因为旧后不是所有最后一个节点,而是当前未处理的最后一个节点,对吧?哎,然后这块呢,就是insert before。
27:17
啊音ER的比before完了,刚才跑题了,思路就断了,哎呀,不能跑题啊,一跑题思路就断,然后这块的话是要移动谁啊,等会啊,嗯,因此比方就是你只要插入一个已经在盗墓数上的节点,它这个时候就会移动啊,刚才可能我没有讲清楚,就是说如何移动节点,哎,就只要你插入啊,就只要你插入一个已经在盗墓树上的。对吧,盗墓树上的节点。啊,它就会被移动。就这样子,就是如何移动节点啊,是这样子的啊。所以这样这个注释我们也写在这啊,那这个时候要移动移动节点,移动的是谁呢?嗯,思路千万不能串,思路一串废了啊,这块是O的end的移动的对吧,哎,想想啊。
28:09
然后啊,我要移动到谁前头呢,移动到。Old start,那为什么是要移动old呢?因为他俩命中了,所以移动谁都行。啊,就把它移动了就行,然后它的这个这个点是谁呢?它的这个点是。呃,参考点是old start的wenode的emm。就行,这样查。啊,然后这时候要要移这个由于是后指针去进行的,所以这块是减减。啊减减一定是啊O的NATX哇,这块好乱,然后这块是加加,因为是前置针。啊,但愿没错啊,如果有错的话,一会儿咱们也慢慢找,拿命找,哎,这块错了。这块错了,幸亏幸亏我看了看,这是不是就是old end呀,这是不是就old start呀,对吧。
29:02
哎,就它一定是跟这个词相同的,这是old star,这也是old star,这是new end new end,因为匹配嘛,指针O1嘛,Old end old end,然后new star new star,明白吧,哎,这样命中,那咱们现在可以测一下,就测一下反过来的情况,Abcde,那反过来的情况大家知道是不是对他是不是全是咱们的那个圈,呃,反过来情况是圈圈几。都懵了是吧,全是圈三兵种啊,就反过来就全是圈三兵种,那咱们现在拭目以待看一看。好,我们给它反过来,A挪下来,B挪下来C挪下来看全反过来,其中这个C还可以给他改改啊,因为它派是有的,咱们注意看啊,应该不不是死循环,因为现在全是圈三命中,注意看啊,注意看很激动人心,三二一点诶,果然太好了,是不是改了。对吧,EDC的CBA对吧,然后全是圈三命中。没问题吧,就没有别的命中了。
30:01
啊,全是圈三冰动。哎,这个时候你就感觉很感动啊,真的很感动,那你说老师我不觉得很感动,我就感觉没听懂,废话,现在是老师在写,你没写啊,你在听课,你在听课啊,但是如果说你真的是自己在写,你自己琢磨出来的话,你会特别感动,但是现在还是会有死循环的成分,因为当他找不到,比如说这块你突然来个Q。那是不是就死了,他找不到找不到啊,那这个时候一点他就死循环,为什么没死循环,因为老节点遍理完了,就是如果如果老节点中有一个没有,现在怕的是老节点中有没有怕删除啊,你看一点它就死循环了。诶,没有死循环,为什么呢,这个Q都没有命中,怎么。哦Q没命中,下一个能命中了诶。完了,他没有死循环,反而是个错。兄弟们,现在没有死循环反而是个错,咱们现在看一看啊,嗯,他没有死循环。
31:01
完了,没有死循环肯定还是个错。A,我看看啊,它全是三命中,现在。然后是四命中。哦,然后把这个Q隔过去之后,它是四命中了,对,哎哟我傻了,你在中间删除的时候,那不就是四命中了吗。对吧。对吧,所以太巧了,所以这个算法好优秀,就是你在中间删除东西了。那不就是圈四命中吗?圈四是什么?圈四是什么?圈四不就是新前与旧后吗?对吧?哎,不就是新的前部与旧的后部不就开始命中了吗?因为他到QQ的时候哇,好牛逼啊,这个算法是吧,所以他没有死循环,好神奇啊,所以你看老师这个算法已经写过不知道多少遍了啊,因为老师也一直在讲这个课,但是呢,老师到这个时候还是觉得这个算法很妙。明白吗?哎,还是觉得这算法怎么样啊,比如说这会再来个UUU,这是一个新的啊,全新的对吧,那这样咱们看一看会不会死循环刷新。啊,这回就死循环了,对吧,也就是说你你删的东西在里头,它不会死循环。
32:04
啊,因为他到最后会三不命中,四命中,东方不亮西方亮,但是在最后他就废了。对吧,在最后他就废了,所以咱们一会儿呢,就要解决在后边删一下啊,在后边它不命中的情况啊,那你说老师你现在是不是可以移动位置了,可以了,我现在已经可以移动位置了,但是移动位置的话,必须要保证三四命中的情况才行。你懂吗?就是你不能特别乱移的,移的特别乱那就废了,移的特别乱,那这时候三四不命中,因为一二是不可能命中的呀,一二是前前后后啊对吧,如果三四不命中的话,那这个时候就废了,所以不能特别乱。懂吧,哎,不能特别乱,特别乱也是死循环,咱们试一试。啊,老师的电脑现在疯狂的转,因为他的这个在死循环,一刷新死循环了吧。对吧,哎,但是如果说你不是特别的乱,比如说这是abcde。对吧,哎,你不是特别乱啊,那这个时候他只要能命中三次,他就不会死循环。
33:01
好吧,哎,就行了,所以就非常的感动啊,非常的兴奋啊一点,你看这不也换过来了吗?对吧,甚至K相同的时候,文字不同他都能换,K相同文字不不同,他是不是都能换呀。是吧,很感动吧,很感动吧,啊那所以说我们现在一会还需要继续写,就是I就是都没有找到的情况啊,都没有找到的时候怎么办,一会咱们继续写啊,咱们视频单独。
我来说两句