使用C++和双指针算法移除数组中的元素,且原地移除,不使用额外的空间

2023-12-16 09:27:12

输入一个数组nums和一个值val,在该数组中,凡是与val相等的元素全部移除,并最终输出该数组,C++代码如下:

#include<iostream>
#include<vector>
#include<ctime>//计算代码所需要的时间
using namespace std;

class Solution
{
public:
    int removeElement(vector<int>& nums, int val)
    {
        int numsize = nums.size();
        int fast = 0, slow = 0;
        for (fast = 0; fast < numsize; fast++)
        {
            if (nums[fast] != val)
            {
                nums[slow] = nums[fast];
                slow++;
            }
        }
        return slow;
    }
};

int main()
{
	clock_t starttime, endtime;
	starttime = clock();//计时开始
    Solution solution;
    vector<int> v;
    int x,val;
    cout << "请输入数组:" << endl;
    while (cin>>x)
    {
        v.push_back(x);
        if (cin.get()=='\n')
        {
            break;
        }
    }
    cout << "原数组为:" << endl;
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << endl;
    cout << "请输入需要移除的值:" << endl;;
    cin >> val;
    int slow = solution.removeElement(v,val);
    cout << "slow的值为:" << slow << endl;
    v.resize(slow);
    cout << "最终数组为:" << endl;
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i] << " ";
    }
    cout << endl;
	endtime = clock();//计时结束
	cout << "运行时间为: " << (double)(endtime - starttime) / CLOCKS_PER_SEC << "s" << endl;
	system("pause");
	return 0;
}

注意事项:

? ? ? ?在使用while(cin>>x)循环输入时,一定要把跳出循环的代码写在数组赋值代码的后面,否则就无法将所有数据全部放进数组中,就会导致失败

文章来源:https://blog.csdn.net/m0_45906029/article/details/134936847
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。