题目
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
思路
原地移出数组的元素其实就是覆盖这个元素。
用i + count来防止i指针超出新数组的实际长度。
代码
class Solution {public int removeElement(int[] nums, int val) {int count = 0;int i = 0;while (i + count < nums.length) {if (nums[i] == val) {removeOne(nums, i);count++;} else {i++;}}return nums.length - count;}public void removeOne(int[] nums, int i) {for (int k = i ; k < nums.length - 1; k++) {nums[k] = nums[k + 1];}}}
