移除元素(简单)
给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素。元素的顺序可能发生改变。然后返回 nums
中与 val
不同的元素的数量。
假设 nums
中不等于 val
的元素数量为 k
,要通过此题,您需要执行以下操作:
- 更改
nums
数组,使nums
的前k
个元素包含不等于val
的元素。nums
的其余元素和nums
的大小并不重要。 - 返回
k
。
方法一:快慢指针
如果快指针指向的元素不等于val,它一定是输出数组的一个元素,我们就将快指针指向的元素复制到慢指针位置,然后将快慢指针同时右移;
如果快指针指向的元素等于 val,它不能在输出数组里,此时慢指针不动,快指针右移一位。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow = 0;
int fast = 0;
while(fast < nums.size() ){
if(nums[fast]!=val){
nums[slow]=nums[fast];
slow++;
}
fast++;
}
return slow;
}
};
方法二:交换元素位置
题目表示元素的顺序并不重要,那么考虑交换元素的位置。
从数组尾部开始遍历,如果元素等于val,则将其置于尾部。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int count = 0;
for(int i = nums.size() - 1; i >= 0; i--){
if(nums[i] == val){
swap(nums[i], nums[nums.size() - 1 - count]);
count++;
}
}
return n - count;
}
};