题目 27. 移除元素 - 力扣(LeetCode)
解题思路
| 思路 | 问题 | 改进 |
|---|---|---|
| 单个指针遍历,删除后整合 | 操作数组两次 | 双指针 |
| 双指针 | 两个指针分别指向什么 | 一个指向遍历数组位置(fast) |
| 一个指向新数组位置(slow) | ||
| 返回值 | 新数组长度?需要新定义一个量吗 | slow慢指针的值 |
代码
class Solution {
public int removeElement(int[] nums, int val) {
int fast = 0;
int slow = 0;
while(fast < nums.length){
if(nums[fast] != val) {
// 更新数值 移动慢指针
nums[slow] = nums[fast];
slow ++;
}
// 移动快指针
fast ++;
}
return slow;
}
}
总结
移除元素用到了最经典的双指针解法,难点在于理解快慢指针在做什么
快指针:遍历当前数组元素
慢指针:指向新数组的下一位
建议阅读代码随想录的动图演示,自己在稿纸上推演一遍
图片来源(侵删)--代码随想录 (programmercarl.com)