删除有序数组中的重复元素python,leetcode 合并有序数组

  删除有序数组中的重复元素python,leetcode 合并有序数组

  给你一个有序数组nums,请将重复的元素就地删除,使每个元素最多出现两次,并返回被删除数组的新长度。

  不是使用额外的数组空间,而是必须就地修改输入数组,并用O(1)额外的空间来完成它。

  描述:

  为什么返回值是整数,输出答案却是数组?

  请注意,输入数组是通过引用传递的,这意味着在函数中修改输入数组对调用者是可见的。

  您可以想象内部操作如下:

  //nums通过“引用”传递。也就是说,不要复制这些论点。

  int len=remove duplicates(nums);

  //在函数中修改输入数组对调用者是可见的。

  //根据你的函数返回的长度,它会打印出该长度范围内数组中的所有元素。

  for(int I=0;我leni ) {

  print(nums[I]);

  }例1:

  输入:nums=[1,1,1,2,2,3]

  输出:5,nums=[1,1,2,2,3]

  说明:函数应该返回新的length length length=5,原数组的前五个元素修改为1,1,2,2,3。不需要考虑数组中超出新长度的元素。示例2:

  输入:nums=[0,0,1,1,1,2,3,3]

  输出:7,nums=[0,0,1,1,2,3,3]

  说明:函数应该返回新的length length length=7,原数组的前五个元素修改为0,0,1,1,2,3,3。不需要考虑数组中超出新长度的元素。提示:

  1=nums。长度=3 * 104-104=nums [I]=104 nums已按升序排列。代码1:采用额外矢量。

  类别解决方案{

  公共:

  int remove duplicates(vector int nums){

  sort(nums.begin()、nums . end());

  if (nums.size()=2)

  返回nums . size();

  int temp count=1;

  vector int tempvec

  for(int I=0;I nums . size();)

  {

  int num=nums[I];

  tempcount=count(nums.begin()、nums.end()、nums[I]);//计算当前数字出现的次数

  if(温度计数2)

  {

  temp vec . push _ back(nums[I]);

  temp vec . push _ back(nums[I]);

  }

  else if (tempcount==1)

  {

  temp vec . push _ back(nums[I]);

  }

  其他

  {

  temp vec . push _ back(nums[I]);

  temp vec . push _ back(nums[I]);

  }

  nums . erase(STD:remove(nums . begin()、nums.end()、nums . end());

  }

  for(int I=0;I temp vec . size();我)

  {

  cout temp vec[I]endl;

  }

  nums . resize(temp vec . size());

  copy(tempvec.begin()、tempvec.end()、nums . begin());

  返回nums . size();

  }

  };代码2:没有使用额外的向量。

  类别解决方案{

  公共:

  int remove duplicates(vector int nums){

  sort(nums.begin()、nums . end());

  if (nums.size()=2)

  返回nums . size();

  int totallen=nums . size();

  int temp count=1;

  for(int I=0;I nums . size();)

  {

  int num=nums[I];

  tempcount=count(nums.begin()、nums.end()、nums[I]);//统计0出现的次数

  total en-=tempcount;

  nums . erase(STD:remove(nums . begin()、nums.end()、nums . end());

  if(温度计数2)

  {

  nums . push _ back(num);

  nums . push _ back(num);

  }

  else if (tempcount==1)

  {

  nums . push _ back(num);

  }

  其他

  {

  nums . push _ back(num);

  nums . push _ back(num);

  }

  if(totaln==0)

  打破;

  }

  for(int I=0;I nums . size();我)

  {

  cout nums[I]endl;

  }

  返回nums . size();

  }

  };

  我不是的。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: