“一念既出,万山无阻。”加油陌生人!
目录
1.双指针--移动零
2.双指针-复写零
ok,首先在学习之前,为了方便大家后面的学习,我们这里需要补充一个知识点,我这里所谓的指针,不是之前学习的带有*的那个指针,我们这里的数组的下标,类似充当指针作用,在这里我们也叫做指针!
了解之后,现在我们开始进入学习!!!
1.双指针--移动零
首先我们带入题来进行教学:
解题思路:
代码如下:
2.双指针-复写零
解题思路:
1.用两个指针,一个指向截止元素,一个指向数组最后一个位置。然后,从后往前进行,是的没错从后往前,那么原因是,如果从前往后去遍历,则会覆盖数字,造成错误。
例子(从前往后,错误示范)
这个不就把“2”覆盖了吗,对吧!!!所以从前往后是错误的!
正确写法:(从后往前)
问题1(寻找截止数):问题又来了?我们从后往前,怎么知道从最后哪里开始呢?答案:先遍历一遍,找到截止“数”
结束之后,我们就找到了截止数是“4” .
问题二(考虑边界问题): 一个小陷阱,如果在寻找截止数的时候,在边界情况,prev>n-1,越界了,这个时候我们如何处理。
代码如下:
步骤三(从后往前遍历):
完整代码: