00:00
大家好,我是上硅谷H5学科讲师刘志远,在程序员的到来之际呢,给大家分享一道面试题啊,叫做去掉数组中重复性的数据。好,那首先呢,我们这里有一个数组啊,这个数组呢,我们会发现啊,里边的元素呢,有一些是相同的,比如说啊我们这个八。那再比如说呢,我们这个20。有两个。那再比如说呢,零。好,那接下来呢,我们要把这些重复的给干掉,也就是说只保证我里边元素所有的数值呢都是不相同的。那此时呢,我们的思路是什么呢?我们可以认为呢,当前这是一个叫做原数组。啊,原数组。然后我们把这些。元素呢,我们重新再插入一个新数组当中啊,借助一个新数组,所以呢,我们这个叫做新数组。
01:04
我得给威尔来一个T。首先我先创建工助组,然后呢,我们的思路是什么呢?我可以这样啊,我先把我元数组当中第一个元素呢,我比如说我先默认的给放到新数组当中,然后呢。那我便利循环啊,便利循环我原数组当中的每一个数值和谁进行比较呢?和我的新数组进行比较啊,当发现值相同的时候呢,那表示是重复性的,就不插入了,如果不同的情况下呢,再插入。那我们举个例子,比如说啊,在我们第一轮循环的时候呢,我们来判断这个八和我心路当中这个八。哎,这时候是否相同,因为当前我的新数组只有一个元素,所以我就跟拿这个八跟这八比就行了,那我们发现呢,八等于八,那说明是重复性的数据,那此时呢,我们就不做插入的工作。
02:00
那接下来轮到11了,那11跟八比那不相同,那不相同是不是就插入了,因为新数当中只有一个元素。所以呢,是不就是这样。然后接下来啊,接下来是不是该轮到20了,那20啊,我们是不是应该这样拿它先和八比较对不对,那此时呢,我们发现20不等于八。那这个时候能不能马上插入呢?肯定是不行的,因为我们的星数当中呢,这时候已经是两个元素了,所以还需要20和11比较,如果跟他比较的时候还不相同,那这时候才说明我整个数当中呢,没有20,我才做一个差入工作。那是不是以此类推啊?那轮到五的时候,五是分别跟八十一二十做比较啊,那此时都没有相同的,是不是把五也给插进。然后再往后呢,是不是就是20了,那20是不是也这样跟八比没问题,哎,但是不能马上插入,再跟11比没问题,不能马上插入诶。
03:01
跟20笔一发现相同了,那它就不能再插入了,那后边所有的数是不是都是这样来进行比较。哎,那我们先什么呀,把大体的思路呢,我们来写一下。我们可以认为D啊,D1是什么呢?啊,先是创建一个新数组是吧,创建一个新数组。然后呢?啊,把什么呀,把元数元数组中的第一个元素。插入啊,插入到哪呢?插入到新数组中。因为当当前我们新数组中没有元素,那肯定数据肯定不会相同的,那你插入是哪个是哪个。那好,那这步工作呢,我们先这么做。是不是就应该是A。中国号零。哎。T中国号零。然后把AR中号零,把八复制给他对不对。
04:04
通过索引值,我们找到第一个,然后插入给T的第一个,那第二步我们应该做什么事情?是不是应该是便利便利。元数组中的每一个。元素。然后呢?分别和谁呢?和新数组。中的每一个元素进行比较。对吧,进行比较。那好。那我们看啊,那现在我想拿元素中的每个元素和我新入组当中每个元素进行比较,那此时呢,我们应该用到一个什么呀,千套循环了对不对?好,那我们应该这么写吧。For啊,括号VR,那我们来个ii呢,等于零。
05:02
那I呢,我们说外循环呢,肯定是元素组。分别拿每一个和系数组比较,所以呢,那我们循环的次数呢,当然就是元数组当中的元素的一个长度了,对不对,好。小于元素的一个长度,然后呢,I加加。那接下来呢,它便利的次数呢,就是一二三四五六七百,诶分别拿出每一个是不是,然后是不是进行比较那。我们是不是先拿八和T当中所有的元素进行比较呀?哎,那T好这呢,我们就先不怎么写了啊。好,把他干掉了。好在这儿呢,我们是不是应该是负。往往还是VR啊,为了看清呢,我们这变量叫K啊K我们默认是不是也是等于零。因为默认我们是不是已经插入一个了啊,那。我们再比一次也没问题,对不对,好。
06:02
在这呢,K小于什么呢?K应该小于t.Les是不是啊,你只要保证把新数组当中的所有度比对完就行了,所以K呢,小于T点。然后呢,K也得加加。好,那接下来就比吧。那怎么比啊?我们是不是希望?诶,先拿出我们的八和他的我们。这个新数当中的每个元素进行比较啊。那这呢,我们的逻辑是什么呢?只要相同呢,是不是就不再接着比了,也就是说啊,当我这刚才说有个八的时候,那八和八已经相等了,你就没必要再拿11跟八比了,对不对?所以在这呢,我们的一个逻辑呢。好,我们这儿先写啊,这是什么外循环,外循环是什么呀?是AR。中。的每个元素,然后里边这个嵌套的负循环啊是什么呀,是T。
07:05
中的每个元素。元素啊。那我们这儿有个逻辑什么呢?If。If什么?当啊。我们拿出Y,呃,元素当中第一个元素,那也就是说呢,这个Y循环呢,肯定循环一次的时候呢,这里边要循环N次对不对,那我们是不是首先先拿出什么呀。AR中国号,哎。那第一回那肯定就是八没问题,对不对,那要和谁做比较呢?是不是和我们的T。中括号K进行比较呀,好,那如果相同了。那第一次这就是八嘛,那八和八比那相同了。那我们需要做的事情是不是就别再比了?那别再比这个循环是不是就让它结束啊?跳出当前的这个内循环吧,然后再走下一圈的外循环。
08:06
啊,所以是不是就是break。结束档次的。啊,跳出什么呀,跳出我们整个的这个内部的负循环,是不是跳出整个内部的负循环。好,那此时呢,我们还差一步。这是什么呀?当啊当这个原数组中的值。和谁呢?和心术。中的值相同的时候。就没有必要。在。继续。比较。然后呢,结束。
09:00
内循环。啊,或者说跳出那几环都行。好,那有件事呢,我们还没考虑进去呢,是什么呀。还是我们刚才说的啊,那这是八,然后呢,下回已经差到11了,那下回20的时候呢,你不能和八比较,认为不相等就可以插入了,是不是。那你需要挨着个儿进行比较。那比到哪里呢?是不应该挨个比到我心乳当中的最后一个元素呀?啊,比到最后元素,那我们是不是可以认为啊。当我整个把我的T循环完以后呢。那都没有什么呀,都没有重复的时候才插入呢,那也就是说呢。我K有可能,或者说直到我K循环到最后一个的时候。啊,循环到最后一个索引的时候,那没有重复的,这个时候才能插入。
10:01
所以呢,这我们还要写一个。衣服判断什么呢?判断我的K是否等于自己的?最大长度。减一说白了说白了就是什么呀,最大的索引值,那如果能走到最大索引值了,说明整个啊,和我亲入组比了一圈了,都没有重复的,这个时候才能进行一个插入。那我们是不是要做的事情就是T?点一个叫做push对不对。Push push插入元素啊,插入元素插谁呢?是不是就是R中括号哎。就是当前你比的那个数。哎,那此时我们的逻辑才OK呢,好,这我们写个注释是什么呢,直到。啊,这是什么呀。拿袁术。拿原数组中的这个。
11:04
啊,某个元素。这个比较。比较到什么,比较到。新树。新数组中的最后一个元素还没有。重复。那此时呢?将。数据。插入新数组。好,那我们的工作呢,其实到这里就做完了。那我们看整个这个过程,那好,首先外循环啊循环拿八八。和内循环当中的,哎,我们这儿就。这儿先不写了啊。啊,或者在这儿呢,我们写一个小小的注释。
12:00
啊,我们来意思一下啊,然后这里边儿是一个空数组啊。好,和八比较,那正好一上来八就等于八直接break跳出了。好,然后呢,下回11 11跟八比没问题啊,11跟八比那。不重复,肯定不走这里,但是得走到这里。那我们来想一想啊,那K此时啊,K此时,那它的索引值是多少,那我们是不是零啊,因为当前里边就有一个元素吧。那此时呢?它一定等于自己的最大,所以值了。那现在呢,我们才能踏踏实实给它插入,所以11就进去了。好,那再往后啊,20,那20呢,当前外循环索引值的是012第二个。啊,所以值是二的第三个元素,好,那二十来比,那20呢,首先呢,我们这K肯定也是零开始那20呢,不等于。我们的八啊,20不等于八,那此时这个条件是不成立的,所以不走。那这个条件呢,也不成立,因为我们的K啊,当前刚仅仅循环到第零次。
13:06
啊,那D04呢,不等于整个一个长度的最大作用值。啊,或者说不等于元素最大索引值,因为现在最大索引值是几呢?011是不是那只有跟八比完,再跟11比完,那这个时候不相同才插入。啊,所以呢,整个循环下来,我们元素当中所有的元素呢,都会和我心数当中所有元素都比一圈,那这时候保证呢,没有相同的元素只会插入。最后呢,我们通过can.log这个日志的方式来打印看一看。啊,我们的这个新数字当中啊,是不是去掉了之前原数当中的一个重复性的数据啊,保存我们来走一下。好,F12。好,那此时呢,我们看到我们的数字是一个长度是七啊再刷一下,我们看到81 25 024,诶这几个数呢,没有一个重复的。
14:05
这就是我们这个叫做去掉数字中重复性的数据。好,那这个案例呢,就讲到这儿。
我来说两句