题目看起来很乱,实际上意思是:把数组中值不等于val的元素放在下标为0,1,2,3......,并且返回数组中值不等于val的元素的个数
方法一:直接判断+覆盖
class Solution
{
public:int removeElement(vector<int>& nums, int val) {int k=0;for(int x:nums){if(x!=val){nums[k++]=x;}}return k;}
};
方法二:快慢指针
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;}
};
解释一下:一开始快慢指针都指向第一个元素,接着快指针往后遍历。如果快指针指向的元素的值不等于val,那么先覆盖,然后慢指针也跟着往后遍历,这保证了不等于val的元素都放在了前面。如果值等于val,那么慢指针停下,快指针继续移动,直到遇见了不等于val的元素,再将其进行覆盖。最后快指针指向末尾,快指针与慢指针之间的差值就是等于val的元素的个数,因此慢指针的值就是不等于val的元素个数