本篇博客将介绍一种使用C++语言实现的数组中移除元素的算法,算法代码基于代码随想录第三章
算法思路: 有两种算法解决该问题,第一种是暴力解法,也就是两个for循环,算法复杂度为n2。第二个算法基于双索引的思想,只需使用一个for循环,算法复杂度为n。
我们使用两个索引,也就是使用空间换时间的一个思想。一个索引用于遍历原始数组,另一个索引用于指示不包含特定元素的新数组的位置。通过遍历原始数组,当遇到需要移除的元素时,我们将跳过该元素,否则将该元素复制到新数组中。
代码实现: 下面是使用C++实现的移除元素算法的示例代码

解析和测试: 在上述代码中,我们定义了一个removeElement函数,它接受一个整型向量nums和需要移除的值val作为参数。通过遍历数组nums,如果当前元素不等于val,则将其复制到新数组中,并移动指针i指向新数组的下一个位置。最后,函数返回新数组的长度。
#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++中移除数组元素的算法,包括一个基于双索引思想、时间复杂度为O(n)的方法和一个暴力解法,时间复杂度为O(n^2)。文中提供了具体的代码实现,并通过示例展示了如何使用这些方法从整型向量中移除特定值。
247

被折叠的 条评论
为什么被折叠?



