力扣27.移除元素【顺序表】

news2024/11/23 19:08:09

🙈个人主页:阿伟@t

👉系列专栏:【C语言–大佬之路】

🎈今日心语:你所看到的惊艳,都曾被平庸所历练。在这里插入图片描述



前言:

在解题过程中一定要画图进行思考,然后再敲代码。


文章目录

  • 移除元素
    • 题目要求:
    • 题目分析:
      • 思路1:
      • 思路2:
      • 思路3:
      • 最终代码:
  • 结语:


移除元素

初学数据结构顺序表,要求时间复杂度为O(N),空间复杂度为O(1):力扣oj链接

题目要求:

题目分析:

思路1:

查找一个删除一个,与顺序表中查找的思路一样。

时间复杂度:O(N2),最坏的情况是数据基本都与val相等,删除一个的时间复杂度为O(N),删除N个为O(N2)。

在这里插入图片描述


思路2:

提供一个临时数组tmp,以空间换时间,不进行挪动。

当,src指向0时,0 != val , 此时将src指向的值赋值到dst指向的位置,src和dst都向后挪动以为,开始寻找下一个。若src指向的值等于val,则dst位置不变,src向后挪动。

最后用tmp中的值从起始位置覆盖原来的数据,释放tmp并改动size的位置以删除后面的元素。


思路3:

再优化,不创临时数组,直接在原始数据上进行操作,使用双指针。

时间复杂度O(N)

空间复杂度O(1)

开始时src和dst都指向初始位置,src负责和val进行比较,当src指向的值不等于val时,将这个值放到dst指向的位置,然后src和dst一起向后挪动。

当src指向的值=val时,dst不动,src向后偏移。

最终代码:

int removeElement(int* nums, int numsSize, int val)
{
int dst = 0,src = 0;
while(src<numsSize)//结束标志src>=numsize
{
     if(nums[src] == val)
     {
         src++;
     }
     else
     {
         nums[dst] = nums[src];
         src++;
         dst++;
     }
}
    return dst;//dst刚好是最后一个元素下一个位置,下标=size
}

为了减少代码量,也可以采取以下两种写法:

int removeElement(int* nums, int numsSize, int val)
{
int dst = 0,src = 0;
while(src<numsSize)//结束标志src>=numsize
{
     if(nums[src] == val)
     {
         src++;
     }
     else
     {
         nums[dst++] = nums[src++];
     }
}
    return dst;//dst刚好是最后一个元素下一个位置,下标=size
}
int removeElement(int* nums, int numsSize, int val)
{
int dst = 0,src = 0;
while(src < numsSize)//结束标志src>=numsize
{
     if(nums[src] != val)
         nums[dst++] = nums[src];
        
    src++;
    
}
    return dst;//dst刚好是最后一个元素下一个位置,下标=size
}

结语:

走到这里本题就介绍完了, 希望以上内容对大家有所帮助👀,如有不足望指出🙏
在这里插入图片描述

前路漫漫!努力变强💪💪 吧!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算属性computed、过滤器定义Vue.filter()

计算属性是为了计算得到一个结果而设计的&#xff1b;放在Vue中computed里面定义&#xff1a;如果我们想在页面上打印一个变量&#xff0c;那就直接“{{变量}}”放在大括号里面&#xff0c;然后变量在data里面定义好初始值&#xff0c;就可以在页面上输出了&#xff0c;比如&am…

策略验证_指标买点分析技法_运用KDJ随机指标选择买点

写在前面&#xff1a; 1. 本文中提到的“股票策略校验工具”的具体使用操作请查看该博文&#xff1b; 2. 文中知识内容来自书籍《同花顺炒股软件从入门到精通》 3. 本系列文章是用来学习技法&#xff0c;文中所得内容都仅仅只是作为演示功能使用 目录 解说 策略代码 结果 解…

tftp服务配置的详细过程,简单快速

主机端编译的Linux内核影像必须有至少一种方式下载到目标板上执行。通常是目标板的引导程序负责把主机端的影像文件下载到内存中。根据不同的连接方式&#xff0c;可以有多种文件传输方式&#xff0c;每一种方式都需要相应的传输软件和协议。 在linux开发中最常用的传输方式为网…

打破汽车零部件企业供应链壁垒,数商云SCM供应链系统实现一体化采购协同

随着疫情反复&#xff0c;包括芯片在内的关键零部件短缺&#xff0c;以及原材料成本和物流费用飙升&#xff0c;使得零部件企业利润大幅压缩甚至亏损。当前&#xff0c;在亚洲、欧洲、北美等地&#xff0c;国际零部件厂商正迎来一波“破产潮”&#xff0c;汽车零部件企业举步维…

数据结构(4)树形结构——二叉树(概述、前序、中序、后序、层序遍历JAVA实现)

目录 4.1.树 4.2.二叉树 4.2.1.概述 4.2.3.存储结构 4.2.3.遍历 1.逻辑简介 2.代码示例 4.1.树 树&#xff0c;由n(n≥0)个有限节点和边组成一个具有层次关系的数据结构。树需要满足以下条件&#xff1a; 任何结点的子节点不相交。任何子结点只有一个父节点。N个结点&am…

carsim 2020 安装说明及多个版本冲突问题解决

在E盘新建一个文件夹&#xff0c;命名为Carsim 2020在Carsim 2020文件夹中&#xff0c;再新建两个文件夹&#xff0c;分别命名为carsim 2020.0_Data和carsim 2020.0_Prog以管理员的身份运行Setup_CarSim_2020.0_r125554.exe&#xff0c;并将安装目录分别选择第2步中的carsim 20…

【LeetCode每日一题:1742. 盒子中小球的最大数量~~~Map+遍历模式+计数】

题目描述 你在一家生产小球的玩具厂工作&#xff0c;有 n 个小球&#xff0c;编号从 lowLimit 开始&#xff0c;到 highLimit 结束&#xff08;包括 lowLimit 和 highLimit &#xff0c;即 n highLimit - lowLimit 1&#xff09;。另有无限数量的盒子&#xff0c;编号从 1 到…

如何设置网络访问 SQL Express?

网络访问 SQL Express 安全和连接SQL Server 配置Windows 防火墙配置连接服务器一旦在本地计算机上设置了 SQL Express,就可以允许网络成员进行远程连接。有不同的方法可以做到这一点,这些步骤可能不适用于现有的网络环境或身份验证方法。下面是在本地计算机上设置的 SQL Ser…

语音前处理技术在会议场景中的应用及挑战

编者按&#xff1a; 随着在线会议的普及&#xff0c;用户已经不再满足于能听到&#xff0c;而是要有更为极致的听感体验&#xff0c;如何能够在复杂多变的应用场景中依旧保证声音清晰流畅是对会议系统的极大挑战。LiveVideoStackCon2022上海站大会邀请到了全时 音视频研发部经理…

网页大作业代码自取【HTML+CSS制作美味糖果网站】

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【2015】408联考数据结构真题整理

2015 1 题目 答案&#xff1a;A 解析 2 题目 解析 3 题目 解析 4 题目 解析 5 题目 答案&#xff1a;D 解析 6 题目 解析 7 题目 答案&#xff1a;A 解析 8 题目 答案&#xff1a;C 解析 9 题目 解析 10 题目 解析 11 题目 解析 41 题目 答案&#xff1a; 3&a…

Android 深入理解View.post()获取宽高、Window加载View原理

文章目录背景&#xff1a;如何在onCreate()中获取View的宽高&#xff1f;View.post()原理Window加载View流程setContentView()ActivityThread#handleResumeActivity()总结扩展Window、Activity及View三者之间的关系是否可以在子线程中更新UI资料背景&#xff1a;如何在onCreate…

从React源码分析看useEffect

热身准备 这里不再讲useLayoutEffect&#xff0c;它和useEffect的代码是一样的&#xff0c;区别主要是&#xff1a; 执行时机不同&#xff1b;useEffect是异步&#xff0c; useLayoutEffect是同步&#xff0c;会阻塞渲染&#xff1b; 初始化 mount mountEffect 在所有hook…

day34 文件上传黑白盒审计逻辑中间件外部引用

前言 #知识点&#xff1a; 1、白盒审计三要素 2、黑盒审计四要素 3、白黑测试流程思路 #详细点&#xff1a; 1、检测层面&#xff1a;前端&#xff0c;后端等 2、检测内容&#xff1a;文件头&#xff0c;完整性&#xff0c;二次渲染等 3、检测后缀&#xff1a;黑名单&am…

强化学习 马尔科夫决策过程(价值迭代、策略迭代、雅克比迭代、蒙特卡洛)

文章目录一、马尔科夫过程Markov Decision Process&#xff08;MDP&#xff09;1.简介2、Markov 特性3、Markov 奖励过程符号表示MRPs的贝尔曼方程4、Markov决策过程符号表示转化MRPs的贝尔曼方程优化问题贝尔曼最优方程二、价值迭代求解1、回顾2、算法3、案例案例1案例2三、策…

Linux学习笔记13 - 进程间通信(IPC)(四)

消息队列 消息队列(message queue)即消息的列表,亦称报文队列&#xff0c;也叫做信箱。是Linux的一种通信机制&#xff0c;这种通信机制传递的数据具有某种结构&#xff0c;而不是简单的字节流[1]。消息队列的本质其实是一个内核提供的链表&#xff0c;内核基于这个链表&#…

有限元仿真分析误差来源之边界条件设置-动载荷

作者&#xff1a;青梅煮酒 导读&#xff1a;前不久&#xff0c;笔者在仿真秀平台分享一篇关于有限元仿真分析误差来源之边界条件&#xff0c;约束和point mass&#xff0c;引发了工程师朋友们广泛关注和思考。通过与他们交流和讨论&#xff0c;我也有所所获。今天继续开展有限…

【强化学习论文合集】AAAI-2022 | 人工智能CCF-A类会议(附链接)

人工智能促进会(AAAI)成立于1979年&#xff0c;前身为美国人工智能协会(American Association for Artificial Intelligence)&#xff0c;是一个非营利性的科学协会&#xff0c;致力于促进对思想和智能行为及其在机器中的体现的潜在机制的科学理解。AAAI旨在促进人工智能的研究…

利用HbuilderX制作简单网页: HTML5期末大作业——html5漫画风格个人主页

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

用JAVA详解冒泡排序

1.代码段实现&#xff1a;&#xff08;混的只需要把第一个拿走即可&#xff09; public static void main(String[]args){int []arr new int [] {99,68,97,86,65,94,33,72};System.out.println("排序前的数组为&#xff1a;");for (int i 0;i < arr.length;i){…