ocpc

题目:

 

 

 

 

解答:

思路:双指针法。

既然问题要求我们就地删除给定值的所有元素,我们就必须用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 };

 

分类:

技术点:

相关文章:

  • 2021-02-03
  • 2021-10-16
  • 2021-12-26
  • 2021-12-26
  • 2021-10-16
  • 2021-10-16
  • 2021-10-16
  • 2021-10-16
猜你喜欢
  • 2019-01-24
  • 2021-12-06
  • 2021-07-31
  • 2021-06-02
  • 2021-04-04
  • 2021-12-26
相关资源
相似解决方案