我们有一个算法刷题群,每周群主会安排 4 道题,节假日没题目。想要一起刷题的小伙伴可以加我微信 zzh0838
题目描述
所有解法均在无参考情况下手写,机打了一遍:
暴力法
cpp
int removeElement(vector<int> &nums, int val) {
int size = nums.size();
for (int i = 0; i < size; ++i) {
if (nums[i] == val) {
for (int j = i; j < size - 1; ++j) {
nums[j] = nums[j + 1];
}
i--;
size--;
}
}
return size;
}
双指针法
cpp
int removeElement(vector<int>& nums, int val) {
int slow = 0;
int fast = 0;
int size = nums.size();
for(fast = 0; fast < size; fast++) {
if(nums[fast] != val) {
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
双指针优化
cpp
int removeElement(vector<int>& nums, int val) {
int left = 0, right = nums.size() - 1;
while(left < right) {
if(nums[left] == val) {
num[left] = nums[right];
right--;
} else {
left++;
}
}
return left;
}