自学内容网 自学内容网

移除元素的讲解,看这篇就够了!

一:题目

博主本文将用指向来形象的表示下标位的移动。 

二:思路

1:两个整形,一个start,一个end,在一开始都 = 0,即这里都指向第一个元素。

2:在查到val之前,查一个,end就赋给start一个,然后再双双+1,即指向下一个元素。

3:当end查到了val的时候,此时此刻,start和end都是指向val的,所以此时我们让start就不变了,让end去向后遍历,找到第一个不是val的值,从这个值开始,只要end指向的值不是val,就覆盖掉start指向的值。覆盖一次,双双向后移动一次,再次判断end然后去覆盖,直到end超出数组范围!

4:最后所有不是val的值都会被放在前面,然后返回start的值即可,他的值就是与val不同的元素的数量。

三:思路的讲解

1:假设数组是以下,val为2。

Q:我们用end去找的时候,为什么不是val,要将end赋给star,并且双双+1?

A1:双双+1是因为要确保end找到val的时候,此时此刻end和start都指向了该val

 A2:end赋给start,是因为在后面有重要作用,要用end指向的非val元素去覆盖start指向的val元素,并且这一步在找到val之前,对数组没有任何的影响

2:遇到val的时候

此时,strat指向val,不再移动,然后让end向后一直遍历,找到第一个不是val的值。用这个值去覆盖start指向的val

即:

3:覆盖完成后,双双向后移动,只要end指向的值不是val就去覆盖掉start

4:最后end会超出范围,即指向2后面的元素,这时候跳出循环

即:

5:此时start的值就是所有非val的元素的个数 

四:代码展示

总结:此题思路理解之后,书写极为简单!

 

 


原文地址:https://blog.csdn.net/shylyly_/article/details/140305491

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!