首页 > 编程语言 >数组类算法题——数组中移除指定元素

数组类算法题——数组中移除指定元素

时间:2023-11-18 14:00:44浏览次数:45  
标签:isValIndex val nums int 算法 数组 移除 isNotValBeginFromEndIndex

数组中移除指定元素

 

题目:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

解题源码:

int removeElement(int* nums, int numsSize, int val) {
    int isNotValBeginFromEndIndex = numsSize - 1;
    int isValIndex = 0;
    int tempContext = 0;
    int tempIndexFromBegin = 0;
    int retNum = numsSize;
    for (; isNotValBeginFromEndIndex > -1; isNotValBeginFromEndIndex--)
    {
        if (nums[isNotValBeginFromEndIndex] == val)
        {
            retNum--;
            continue;
        }
        if (nums[isNotValBeginFromEndIndex] != val)
        {
            for (isValIndex = 0; isValIndex < isNotValBeginFromEndIndex; isValIndex++)
            {
                if (nums[isValIndex] == val)
                {
                    tempContext = nums[isValIndex];
                    nums[isValIndex] = nums[isNotValBeginFromEndIndex];
                    nums[isNotValBeginFromEndIndex] = tempContext;
                    retNum--;
                    break;
                }
            }
        }
    }
    return retNum;
}

 

 

 

解题思路:

从数组最后一个开始,如果有等于val的直接往前,如果没有就往前找有等于的进行替换。

复杂度:

时间复杂度:O(n*m)

空间复杂度: O(1)

 

标签:isValIndex,val,nums,int,算法,数组,移除,isNotValBeginFromEndIndex
From: https://www.cnblogs.com/Sna1lGo/p/17840416.html

相关文章

  • C# 去掉Byte数组尾部的0x00
    ///<summary>///去除byte[]数组缓冲区内的尾部空白区;从末尾向前判断;///</summary>///<paramname="bytes"></param>///<returns></returns>publicbyte[]bytesTrimEnd(byte[]bytes)......
  • 【教3妹学编程-算法题】数位和相等数对的最大和
    3妹:2哥,你有没有看到新闻“18岁父亲为4岁儿子落户现身亲子鉴定”2哥 :啥?18岁就当爹啦?3妹:确切的说是14岁好吧。2哥 :哎,想我30了,还是个单身狗。3妹:别急啊,2嫂肯定在某个地方等着你去娶她呢。又不是结婚越早越好。2哥:是啊,这孩子14岁当爹,也太早了。3妹:2哥,你找女朋友有什么条件没有......
  • ⦁ 二维数组传递参数
    #include<iostream>usingnamespacestd;//第一维长度为tvoidp1(inta[][5],intt){cout<<"第一种调用方式:"<<endl;for(inti=0;i<t;i++){for(intj=0;j<5;j++){cout<<a[i][j]<<"";......
  • ⦁ 一维数组传递参数
    #include<iostream>usingnamespacestd;//变量名[]形式传递一维数组//求平均数floatavg(inta[],intn){ floatsum=0.0; for(inti=0;i<n;i++){ sum+=a[i]; } returnsum/n;}//以指针形式遍历,*a指向数组a的a[0]内存位置intsum(int*a,intn){ intt=0; for......
  • 进程有哪些调度算法?
    进程调度就是确定某一个时刻CPU运行哪个进程,常见的进程调度算法有:先来先服务非抢占式的调度算法,按照请求的顺序进行调度。有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。另外,对I/O密集型进程......
  • C语言——数组
    1.字符型数组与字符指针的赋值constchar*pStr="Hello!";charaStr[sizeof("Hello!")]="Hello!";cout<<aStr<<"\n"<<pStr<<endl;cout<<strlen(aStr)<<"\n"......
  • 无涯教程-D语言 - 数组(Arrays)
    D编程语言提供了一种名为arrays的数据结构,该数据结构存储相同类型元素的固定大小的顺序集合,数组用于存储数据集合。声明数组要使用D编程语言声明数组,程序员可以指定元素的类型和数组所需的元素数量,如下所示:typearrayName[arraySize];这称为一维数组,arraySize必须是......
  • (javascript)将ztree树结构的数据转成二维数组
    ztree树结构的数据结构如下:[{"id":3990,"name":"泡沫灭火","iconShow":false,"children":[{"id":8616,......
  • 智慧工地平台,利用5G及智能终端算法,实现IOT设备数据抓取与处理
    智慧工地平台采用先进的云计算、物联网和大数据技术,可以实现智慧工地方案的落地。能够实现实时掌控工地活动及各项进度,有效预防违章施工。能够为工地提供多项服务,如安全预警、机械智能监控、作业指导、绿色施工、劳务管理、工程进度监控、施工质量检查等。可实时收录及通知施工进度......
  • 算法题 - 跳楼梯
    提问:有一道编程题是跳楼梯类型的:有M级楼梯,若每次只能向上跳1级或4级或7级,那么要走上M级,共有多少种写法,请用C语言写出这到题的最优解法,最好用递归来解决,并给每行代码和代码块添加注释解答:这是一个动态规划问题,我们可以使用递归和备忘录的方法来解决。首先定义一个数组dp,其中dp[i]表......