分析
-
本题的考点:双指针。
-
使用两个指针
i、k
,其中[0, k)
是需要保留的元素,当如果nums[i]==val
时直接跳过,否则的话让nums[k++] = nums[i]
即可。
代码
- C++
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int k = 0; // [0, k)
for (int i = 0; i < nums.size(); i++)
if (nums[i] != val)
nums[k++] = nums[i];
return k;
}
};
- Java
class Solution {
public int removeElement(int[] nums, int val) {
int k = 0; // [0, k)
for (int i = 0; i < nums.length; i++)
if (nums[i] != val)
nums[k++] = nums[i];
return k;
}
}
时空复杂度分析
-
时间复杂度:$O(n)$,
n
为数组长度。 -
空间复杂度:$O(1)$。