【LeetCode】27. 移除元素
1 题目描述
27. 移除元素要求给定一个数组 nums
和一个值 val
,编写一个方法来原地移除数组中所有等于 val
的元素,并返回移除后数组的新长度。不需要保持元素的原始顺序。
2 解题思路
为了在原地修改数组并保证空间复杂度为 O(1),我们可以使用双指针技巧。具体来说,我们使用两个指针 slow
和 fast
,其中 slow
指向数组中下一个待填充的位置,而 fast
用于遍历数组。
- 当
nums[fast]
不等于val
时,我们将它复制到nums[slow]
,然后增加slow
的值。 - 当
nums[fast]
等于val
时,我们跳过该元素,并继续增加fast
的值。 - 这样,当
fast
遍历完整个数组后,slow
的值即为新数组的长度。
3 Java 代码实现
public class Solution {
public int removeElement(int[] nums, int val) {
int slow = 0;
for (int fast = 0; fast < nums.length; fast++) {
if (nums[fast] != val) {
nums[slow++] = nums[fast];
}
}
return slow;
}
}
4 注意事项
- 双指针:使用双指针技术,其中
slow
指针追踪新数组的当前位置,而fast
指针用于遍历整个数组。 - 原地修改:直接在原数组上进行修改,不需要额外的空间。
- 返回值:返回
slow
指针的值,即为不等于val
的元素的数量。