//暴力解法 O(n^2)
class Solution1 {
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+1;j < size;j++)
{
nums[j] = nums[j-1]
}
i--;
size--;
}
}
return size;
}
};
//双指针法 O(n)
class Solution2 {
public:
int removeElement(vector<int>& nums, int val) {
int slowindex = 0;
int fastindex = 0;
for(fastindex = 0;fastindex < nums.size();fastindex++)
{
if(nums[fastindex] == val)
{
nums[slowindex++] = nums[fastindex];
}
}
return slowindex;
}
};
//思考slowindex和fastindex真的是指针吗?
//它们是遍历下标的数字,本质上只是int类型的数字,不是指针,所以最后返回的值就是答案数组的长度
//双指针法用一快一慢两个指针跑一个循环,时间复杂度有所降低
//很多时候想不起来用双指针,用双循环的话难免会碰到i--漏写的情况
//双指针追根到底还是双变量的循环问题