【数组】27. 移除元素
题目:

解答:
思路:双指针法。
既然问题要求我们就地删除给定值的所有元素,我们就必须用O(1)的额外空间来处理它。如何解决?可以保留两个指针i和j,其中i是慢指针,j是快指针。
算法:
当nums[j]与给定的值相等时,递增j以跳过该元素。只要nums[j] != val, 我们就复制nums[j]到nums[i],并同时递增两个索引。重复这一过程,直到j到达数组的末尾,该数组的新长度为i。
1 class Solution { 2 public: 3 int removeElement(vector<int>& nums, int val) 4 { 5 int ans = 0; 6 7 for (int i = 0; i < nums.size(); i++) 8 { 9 if (nums[i] != val) 10 { 11 nums[ans] = nums[i]; 12 ans++; 13 } 14 } 15 16 return ans; 17 } 18 };

浙公网安备 33010602011771号