这个算法是用来从一个整数数组 nums
中移除所有值等于给定整数 val
的元素,并返回新数组的长度。
- 使用两个指针
i
和n
,其中i
用于遍历原始数组nums
,而n
用于跟踪新数组中的位置。 - 从头开始遍历
nums
数组,对于每个元素nums[i]
,进行以下检查:
- 如果
nums[i]
不等于val
,将其复制到新数组的位置n
,然后递增n
。 - 如果
nums[i]
等于val
,则跳过,不将其包含在新数组中。
- 继续遍历整个数组,直到
i
到达数组的末尾。 - 返回
n
的值,这个值表示新数组中的不包含等于val
的元素的长度。
这个算法的核心思想是通过遍历数组一次,将不等于 val
的元素逐个复制到新数组的开头,同时保持新数组的长度,以达到删除所有等于 val
的元素的目的。这是一种高效的方式,因为它只需要一次遍历数组,时间复杂度为 O(n),其中 n 是数组的长度。
举个例子,如果原始数组 nums
为 [3, 2, 2, 3, 4, 5, 2]
,并且 val
为 2,使用这个算法后,新数组会变成 [3, 3, 4, 5]
,同时返回值 n
为 4,表示新数组的长度。
时间复杂度为O(n)
class Solution { public int removeElement(int[] nums, int val) { int n = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] != val) { nums[n] = nums[i]; n++; } } return n; }}