【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的元素的数量。