【LeetCode】27. 移除元素

in #programming4 months ago

1 题目描述

27. 移除元素要求给定一个数组 nums 和一个值 val,编写一个方法来原地移除数组中所有等于 val 的元素,并返回移除后数组的新长度。不需要保持元素的原始顺序。

2 解题思路

为了在原地修改数组并保证空间复杂度为 O(1),我们可以使用双指针技巧。具体来说,我们使用两个指针 slowfast,其中 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 的元素的数量。