用c++语言移除数组中的元素

用c++语言移除数组中的元素

题目:

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:

给定 nums = [0,1,2,2,3,0,4,2], val = 2,

函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。

注意这五个元素可为任意顺序。

你不需要考虑数组中超出新长度后面的元素。

解题思路

题目描述不允许使用额外的数组空间,所以只能在原数组上操作。我们使用两个指针,一个快指针 i 和一个慢指针 k 。i 每次移动一步,而 k 只在添加新的被需要的值时才移动一步。因为我们的新数组的长度会小于等于旧数组,调用者在调用函数时根据返回的长度,它会打印出数组中该长度范围(k)内的所有元素。因此,范围外的元素不会输出。

源代码如下

class Solution 
{
 public: int removeElement(vector<int>& nums, int val) 
 { 
 int k = 0; 
 for(int i = 0; i < nums.size(); ++ i)
      { 
      if(nums[i] != val)
       { 
       nums[k] = nums[i]; 
       ++ k; 
       }  
       } 
  return k;
   } 
  };
发布了15 篇原创文章 · 获赞 0 · 访问量 178

猜你喜欢

转载自blog.csdn.net/weixin_45775445/article/details/104467365