Given an array nums and a value
val
, remove all instances of that value in-place and return the new length.Do not allocate extra space for another array, you must do this by modifying the input array in-place with
O(1)
extra memory.The order of elements can be changed. It doesn't matter what you leave beyond the new length.
Example 1:
Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2]
Explanation: Your function should return length = 2, with the first two elements of nums being 2.
It doesn't matter what you leave beyond the returned length. For example if you return 2 with nums = [2,2,3,3] or nums = [2,2,0,0], your answer will be accepted.
Example 2:
Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3]
Explanation: Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4. Note that the order of those five elements can be arbitrary. It doesn't matter what values are set beyond the returned length.
从一个数组中移除指定的元素值,返回最后数组的长度。
只需要保留与指定值$val$不相等的元素,使用一个下标指针$j$,从前向后遍历数组,遇到不等于$val$的元素,就添加到有效部分的队尾。
使用一个下标指针$i$维护一个“队列”,下标指针$i$指向“队列”的尾部,“队列”中所有元素都不等于$val$。
public int removeDuplicates(int[] nums) {
int i = 0;
for (int j = 1;j < nums.length;j++) {
if (nums[i] != nums[j]) {
nums[++i] = nums[j];
}
}
return i + 1;
}
时间复杂度:$O(N)$
只需要保留符合条件的元素,那就把符合条件的元素不断添加到一个“队列”尾部。