看着题目的描述,想着这道题并不难,结果上手之后两个for循环编不出来,卡在如果有连续两个与目标相同的数没法检测,看了卡哥的暴力题解后发现for循环竟然可以设置一个可变的界,以及i的数值在循环中可以改变,长见识了。
暴力解法
class Solution {
public:
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];
}
size--;
i--;
}
}
return size;
}
};
另一种是快慢指针法
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slowIndex = 0;
for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++){
if (nums[fastIndex] != val){
nums[slowIndex++] = nums[fastIndex];
}
}
return slowIndex;
}
};
非常巧妙,一个for循环便解决了问题,这种双指针一定是在后续的很多地方都可以用得到的。