27.移除元素
🐵 27.移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
思路
基本思想
为了将
所有值为val的元素移除,需要将所有不是val的元素向前移动,以覆盖所有val的元素,逆向思维将问题转化之后,一切迎刃而解,使用双指针解题
fast寻找每一个不是val的元素,一旦找到,slow位置就放置不是val的元素,如果遇到值为val的元素,slow不动,fast向后寻找不是val的元素覆盖slow位置上的元素即可
执行流程
- 遍历数组
- 遇到不是val的元素,直接将元素搬到slow的位置上
- 遇到是val的元素,slow不动,fast向后移动寻找不是val的元素将值为val的元素覆盖
- 返回slow的值就是删除之后数组的长度
代码
根据以上分析,得出以下代码:
|
|
总结
主要是思维的转换,将删除val元素转换为将不是val的元素向前移动,之后只需要找出所有不是val的元素移动即可