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

news/2024/7/8 1:53:27

输入一个数组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)循环输入时,一定要把跳出循环的代码写在数组赋值代码的后面,否则就无法将所有数据全部放进数组中,就会导致失败


http://lihuaxi.xjx100.cn/news/1883960.html

相关文章

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring IOC底层实现

第一章 SpringIOC底层实现 IOC&#xff1a;将对象的控制器反转给Spring 1.1 BeanFactory与ApplicationContexet BeanFactory&#xff1a;IOC容器的基本实现&#xff0c;是Spring内部的使用接口&#xff0c;是面向Spring本身的&#xff0c;不是提供给开发人员使用的。****Appli…

用提问的方式来学习:冯·诺伊曼体系结构与操作系统OS

学习冯诺伊曼体系结构之前&#xff0c;我们要本着两个问题来学习&#xff1a; 什么是冯诺伊曼体系结构&#xff1f;为什么要有冯诺伊曼体系结构&#xff1f; 一、冯诺伊曼体系结构 1. 什么是冯诺伊曼体系结构&#xff1f; 那我们就先来回答一下什么是冯诺伊曼体系结构&#x…

[cleanrl] ppo_continuous_action源码解析

1 import库&#xff08;略&#xff09; import os import random import time from dataclasses import dataclassimport gymnasium as gym import numpy as np import torch import torch.nn as nn import torch.optim as optim import tyro from torch.distributions.normal…

C++入门【6-C++ 修饰符类型】

C 修饰符类型 C 允许在 char、int 和 double 数据类型前放置修饰符。 修饰符是用于改变变量类型的行为的关键字&#xff0c;它更能满足各种情境的需求。 下面列出了数据类型修饰符&#xff1a; signed&#xff1a;表示变量可以存储负数。对于整型变量来说&#xff0c;signe…

RealSense最简单配置环境只需要5分钟,不用自行添加任何包含目录、库目录。Visual Studio2022、C++。

又开始搞点云了&#xff0c;现在用的是Intel的realsense。 看网上步骤都挺繁琐的&#xff0c;本文搭建只需要3分钟。直接用官方提供的属性表&#xff0c;不用自行添加任何包含目录、库目录。 第一分钟&#xff1a;用Visual Studio新建一个工程&#xff08;此时你是没有intel.…

FTR223限时回归?经典三花再加金翅膀,CL500特别款亮相

FTR223可以说是非常经典的一款本田小攀爬车型了&#xff0c;之前我还有幸玩过一段时间&#xff0c;最近本田在泰国车展上展出了CL500的特别版&#xff0c;其中FTR223纪念版的版画让人眼前一亮&#xff0c;经典的白、红、蓝三色搭配让人眼前一亮。 CL500这台车在国内今年刚上市&…

手撕分布式缓存---HTTP Server搭建

经过了前两个章节的学习&#xff0c;分布式缓存的存储与新增我们已经实现了&#xff0c;并且对其做了高可用处理。本章节我们剥离和缓存强相关的逻辑&#xff0c;开始搭建一个HTTP服务器&#xff0c;毕竟缓存数据库搭建完之后别人没法访问也是没有用处的。这一章节我们重点学习…

工作记录----常用注解-----12.11

Slf4j 它可以帮助在类中自动生成一个名为 log 的日志对象&#xff0c;使得在类中可以直接使用这个日志对象进行日志记录 具体来说&#xff0c;当你在类上添加 Slf4j 注解后&#xff0c;在该类中就可以直接使用 log 对象来记录日志&#xff0c;无需手动创建和初始化日志对象&a…