思路
- 更新数组
遍历数组,遇到了等于 val 的元素就移除,然后维护更新数组。
代码如下:
public static int removeElement(int[] nums, int val) {
int ans = nums.length;
for (int i = 0; i < ans; i++) {
if (nums[i] == val) {
for (int j = i; j < ans - 1; j++) {
nums[j] = nums[j + 1];
}
ans--;
i--;
}
}
return ans;
}
- 双指针交换
设置左右双指针,左指针遍历数组元素,遇到需要移除的元素就交换到数组后面(右指针指向元素),因此右指针初始指向数组末尾,交换后逐渐前移
代码如下:
public static int removeElement(int[] nums, int val) {
int left = 0, right = nums.length - 1;
while (left <= right) {
if (nums[left] == val) {
nums[left] = nums[right];
right--;
} else {
left++;
}
}
return left;
}