题目链接:
问题描述:
给你一个数组
nums
和一个值val
,你需要 原地 移除所有数值等于val
的元素。元素的顺序可能发生改变。然后返回nums
中与val
不同的元素的数量。假设
nums
中不等于val
的元素数量为k
,要通过此题,您需要执行以下操作:
- 更改
nums
数组,使nums
的前k
个元素包含不等于val
的元素。nums
的其余元素和nums
的大小并不重要。- 返回
k
。
解决方案:
方法一:原数组上进行遍历并且前移
时间复杂度:O(N^2) 空间复杂度:O(1)
方法二:新开辟一个数组
方法三:双指针法
代码示例:
int removeElement(int* nums, int numsSize, int val) {
int fast = 0;
int slow = 0;
for(fast = 0; fast < numsSize; fast++)
{
if(nums[fast] != val)
{
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}