本文共 814 字,大约阅读时间需要 2 分钟。
为了解决这个问题,我们需要在原地移除数组中所有等于给定值的元素,并返回移除后数组的新长度。我们不能使用额外的数组空间,因此必须在原数组上进行操作。
我们可以使用双指针法来解决这个问题。快指针遍历数组,遇到不等于目标值的元素时,将其复制到慢指针当前的位置,并前进慢指针。这种方法确保我们在原地修改数组,同时不使用额外的空间,时间复杂度为 O(n),空间复杂度为 O(1)。
public class Test { public int removeElement(int[] nums, int val) { int i = 0; for (int j = 0; j < nums.length; j++) { if (nums[j] != val) { nums[i] = nums[j]; i++; } } return i; } public static void main(String[] args) { int[] nums = {0,1,2,2,3,0,4,2}; System.out.println(new Test().removeElement(nums, 2)); }}
i
初始化为 0,用于记录新数组的起始位置。j
从 0 开始遍历数组。nums[j]
不等于目标值 val
,则将其复制到 nums[i]
,然后前进慢指针 i
。i
的值即为新数组的长度。这种方法确保我们在原地修改数组,符合题目要求,同时保证了时间和空间上的效率。
转载地址:http://fxelz.baihongyu.com/