题目:27. 移除元素
解题思路
- 给定一个数组,以及一个需要删除的值;要求在 O(1) 的空间复杂度中完成
- 可考虑采用快慢指针的方式,left 用于记录当前需要进行替换的元素,right 指针用于遍历整个数组
- 当 right 指针所指的值是待删除元素时,那么 right 右移,left 不动即可
- 若不是,那么将 right 所指值赋值给left即可
- 当 left 和 right 指向同一位置是否有影响?当前 right 所指值不需要删除,所以将 right 所指位置的值赋值给 left,即将当前位置的元素赋值给当前元素,自己替换自己,不影响结果。
# Java代码实现
class Solution {
public int removeElement(int[] nums, int val) {
if(nums == null || nums.length == 0){
return 0;
}
int left = 0;
for(int right=0; right<nums.length; right++) {
if(nums[right] != val) {
nums[left] = nums[right];
left++;
}
}
return left;
}
}
```java class Solution { public int removeElement(int[] nums, int val) { int left = 0, right = 0; while(right < nums.length) { if(nums[right] != val) { nums[left] = nums[right]; left++; right++; } else { right = right + 1; } } return left; } } ```