27移除元素
力扣刷题 27.移除元素--day1
解法
一、暴力解法
采用数组移动覆盖的方式来移除元素
时间复杂度为 O(n^2)
//暴力解法
int removeElement(vector<int>& nums, int val) {
int size = nums.size();
for(int i = 0; i<size;i++){
if(nums[i] == val){
size--;
for(int j = i; j<size; j++){
nums[j] = nums[j + 1];
}
i--;
}
}
return size;
}
二、双指针法
一个快指针和一个满指针
快指针用于读取元素, 跳过需删除的元素
慢指针稳步前近,存入符合的元素
代码思路:
采用 fast 指针一直往前遍历,
当找到一个不为 val 的元素时,将其存入 slow 指针的位置, fast 和 slow 都进 1
当找到一个为 val 的元素时, slow 不变, fast 进 1
// 双指针法
int removeElement(vector<int>& nums, int val) {
int slow, fast;
slow = fast = 0;
int size = nums.size();
while(fast < size){
if(nums[fast] != val){
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}