本篇博客将介绍一种使用C++语言实现的数组中移除元素的算法,算法代码基于代码随想录第三章
算法思路: 有两种算法解决该问题,第一种是暴力解法,也就是两个for循环,算法复杂度为n2。第二个算法基于双索引的思想,只需使用一个for循环,算法复杂度为n。
我们使用两个索引,也就是使用空间换时间的一个思想。一个索引用于遍历原始数组,另一个索引用于指示不包含特定元素的新数组的位置。通过遍历原始数组,当遇到需要移除的元素时,我们将跳过该元素,否则将该元素复制到新数组中。
代码实现: 下面是使用C++实现的移除元素算法的示例代码
文章来源:https://www.toymoban.com/news/detail-702645.html
解析和测试: 在上述代码中,我们定义了一个removeElement
函数,它接受一个整型向量nums
和需要移除的值val
作为参数。通过遍历数组nums
,如果当前元素不等于val
,则将其复制到新数组中,并移动指针i
指向新数组的下一个位置。最后,函数返回新数组的长度。文章来源地址https://www.toymoban.com/news/detail-702645.html
#include <iostream>
#include <vector>
using namespace std;
class Solution{
public:
int removeElement(vector<int>& nums, int value)
{
int slowpointer = 0;
for (int fastpointer = 0; fastpointer < nums.size(); fastpointer++)
{
if (nums[fastpointer] != value)
{
nums[slowpointer++] = nums[fastpointer];
}
}
return slowpointer;
}
int removeElement2(vector<int>& nums, int value)
{
int length = nums.size();
for (int i = 0; i < length; i++)
{
if (nums[i] == value)
{
for (int j = i; j < length - 1; j++)
{
nums[j] = nums[j+1];
i = i - 1;
length = length - 1;
}
}
}
return length;
}
};
int main()
{
Solution s = Solution();
std::vector<int> values;
values.push_back(3);
values.push_back(4);
values.push_back(5);
values.push_back(4);
values.push_back(4);
values.push_back(6);
int ret2 = s.removeElement2(values,4);
cout << "最后的返回值是" << ret2 << endl;
}
到了这里,关于使用C++实现数组中移除元素的算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!