参考链接
- https://leetcode-cn.com/problems/remove-element/
题目描述
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
解题思路
感觉原地修改数组的都是用双指针,一个指针定位要被替换的位置,一个指针在外面找到值传递过来。这道题就固定i指针,指针j负责寻找val,如果相等,就忽略,如果不等,就放在i指针的位置。
代码
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
if (nums.size() == 0)
{
return 0;
}
int i = 0;
int j = 0;
for (i = 0, j = 0; j < nums.size(); j ++)
{
if (nums[j] != val)
{
nums[i] = nums[j];
i ++;
}
}
return i;
}
};