使用C++实现数组中移除元素的算法

本篇博客将介绍一种使用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;
}

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值