【数组】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 };

 

posted @ 2020-05-04 15:37  梦醒潇湘  阅读(155)  评论(0)    收藏  举报