Given an array and a value, 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 in place with constant memory.
The order of elements can be changed. It doesn't matter what you leave beyond the new length.
Example:
Given input array nums = [3,2,2,3]
, val = 3
Your function should return length = 2, with the first two elements of nums being 2.
算法:记录每个元素需要移动的步数,每次检测到一个相同的值,则后面需要移动的步数加1,依次移动即可
代码:
int removeElement(int* nums, int numsSize, int val) {
int step = 0;
for (int i = 0; i < numsSize; ++i)
{
if (nums[i] == val) {
step++;
}
else if (step > 0){
nums[i - step] = nums[i];
}
}
return numsSize - step;
}