给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
力扣
https://leetcode-cn.com/problems/remove-element/
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
力扣
https://leetcode-cn.com/problems/remove-element/
int swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
return tmp;
}
int removeElement(int* nums, int numsSize, int val){
int i;
for(i = 0; i < numsSize; ++i) {
while(nums[i] == val) { // (1) 注意这里是 while,而不是 if
swap(&nums[i], &nums[numsSize-1]); // (2) 如果发现这个数是需要删除的,则和最后一个数交换
--numsSize; // (3) 最后那个数直接弹出不管了
if(i >= numsSize) { // (4) 没有多余元素时,直接跳出循环
break;
}
}
}
return numsSize;
}