LeetCode 27.移除元素

news2024/11/25 11:04:42

文章目录

  • 💡题目分析
  • 💡解题思路
    • 🚩思路1:暴力求解 --- 遍历
    • 🔔接口源码:
    • 🚩思路2:空间换时间
    • 🔔接口源码:
    • 🚩思路3:双指针(快慢指针)
    • 🔔接口源码:

在这里插入图片描述
题目链接👉LeetCode 27.移除元素👈

💡题目分析

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

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

💡解题思路

🚩思路1:暴力求解 — 遍历

直接一个循环遍历nums数组每个元素;
再对每个元素判断是否和val相等;
相等就把后面的元素往前挪动覆盖它,已达到删除val的目的;
🚨注意:移除元素后,要对数组元素个数 -1numsSize-1的同时,还要对第一层的for循环遍历的 ii- -,因为元素移动覆盖时候位置发生变化

👇图解👇
在这里插入图片描述

🔔接口源码:

int removeElement(int* nums, int numsSize, int val)
{
    int tmp = numsSize ; //创建临时变量,返回时候要用
	int count = 0; //统计移除元素的个数
	for(int i = 0; i<numsSize; i++)
	{		
		if(val == nums[i])
		{
			count++;
			for(int j = i; j<numsSize -1; j++)
			{
				nums[j] = nums[j+1];				
			}
            numsSize--;
            i--; //由于元素都是往前挪动了,所以i也要--
		}
	}
	return tmp - count;
}

此方法:
时间复杂度:O(N^2)
空间复杂度:O(1)

🚩思路2:空间换时间

创建一个新数组 tmp,大小为 numsSize;
同时把原数组 nums中,不等于 val的数据,放到新数组 tmp中;
然后再把 tmp中的数据拷贝回到原数组 nums中;

👇图解👇
在这里插入图片描述

🔔接口源码:

int removeElement(int* nums, int numsSize, int val)
{
    int *tmp = (int*)malloc(sizeof(int) * numsSize);
    int j = 0;//执行临时数组的下标
    
    //找不等于val的值放到临时数组
    for(int i = 0; i<numsSize; i++){
        if(val != nums[i]){
            tmp[j++] = nums[i];
        }
    }
    //把临时数组的值,覆盖回去
    //上面的循环结束后,j  = 不是val元素的个数
    for(int i = 0; i<j; i++){
        nums[i] = tmp[i];
    }
    return j;
}

此方法:
时间复杂度:O(N)
空间复杂度:O(N)

🚩思路3:双指针(快慢指针)

定义两个指针:一个dst,一个src;
dst表示目的地指针,src是原指针,src用来移动寻找不等于val的值;
src找到不等于val的值那么就把它赋值给dst对应的值,即 nums[dst] = nums[src],同时dst++; src++
src碰到与val相等的值,那么src++,其他不变

👇图解👇
在这里插入图片描述
在这里插入图片描述

🔔接口源码:

int removeElement(int* nums, int numsSize, int val)
{
    int src = 0;
    int dst = 0;
    while (src < numsSize)
    {
        if (nums[src] != val)
        {
            nums[dst++] = nums[src++];
        }
        else
        {
            src++;
        }
    }
    return dst;
}

同理的 ,也可以这样写👇

int removeElement(int* nums, int numsSize, int val)
{
    int dst = 0;
    for (int src = 0; src < numsSize; src++)
    {
        if (nums[src] != val)
        {
            nums[dst] = nums[src];
            dst++;
        }
    }
    return dst;
}

此方法:
时间复杂度:O(N)
空间复杂度:O(1)

在这里插入图片描述

🥰希望大家能够理解!

总结🥰
以上就是本题讲解的全部内容啦🥳🥳🥳🥳
本文章所在【C语言刷题】专栏,感兴趣的烙铁可以订阅本专栏哦🥳🥳🥳
前途很远,也很暗,但是不要怕,不怕的人面前才有路。💕💕💕
小的会继续学习,继续努力带来更好的作品😊😊😊
创作写文不易,还多请各位大佬uu们多多支持哦🥰🥰🥰

请添加图片描述

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

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

相关文章

Linux系统之部署Samba服务

Linux系统之部署Samba服务 一、Samba服务介绍1.Samba服务简介2.NFS和CIFS简介3.Smaba服务相关包4.samba监听端口4.samba相关工具及命令 二、环境规划介绍1.环境规划2.本次实践介绍 三、Samba服务端配置1.检查yum仓库2.安装smaba相关软件包3.创建共享目录4.设置共享目录权限5.新…

Adobe认证证书

Adobe认证证书是Adobe公司颁发的一种专业认证证书&#xff0c;用于证明持有人在相关Adobe软件的使用和应用方面具有专业水平。该证书是业内公认的专业认证&#xff0c;具有较高的价值和认可度&#xff0c;可以帮助持有人提高职业竞争力和工作效率。 Adobe公司提供了多种认证考…

CentOS7(三)MySQL8 Redis7 (单机)安装

文章目录 一、MySQL安装1、确认是否有老版本2、在线安装3、本地安装 二、启动MySQL三、MySQL常用配置1、密码修改2、配置远程登录3、开启防火墙 3306 端口4、 报错5、MySQL中Java写入时间少14小时 四、Redis 安装1、安装Redis依赖2、启动redis3、指定配置启动 & 后台运行4、…

手机端H5地图调起开发实战案例解析(百度高德腾讯地图调起、底部弹出层、提示安装地图导航APP)

文章目录 1.导航菜单配置构建导航菜单容器设置取消事件调起菜单样式表 2.地图调起事件导航到这里获取导航坐标百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换 3.地图调起效果 地图调起功能&#xff0c;是地图URI API是为开发者提供直接调起地图产品&#xff08;手机客户端&a…

nextjs13临时笔记

动态路由 文件夹以中括号命名[id] -pages: --list: ---[id]: ----index.jsx(访问路径/list/1 即这种形式/list/:id) ---index.jsx(访问路径/list)[...params]gpt接口分析 初始化项目 npm install next react react-dom # or yarn add next react react-dom # or pnpm add n…

WPF教程(六)--依赖属性(2)--属性值优先级与继承

一、 依赖属性的优先级 由于WPF 允许我们可以在多个地方设置依赖属性的值&#xff0c;所以我们就必须要用一个标准来保证值的优先级别。比如下面的例子中&#xff0c;我们在三个地方设置了按钮的背景颜色&#xff0c;那么哪一个设置才会是最终的结果呢&#xff1f;是Black、Re…

[oeasy]python0136_接收输入_input函数_字符串_str

输入变量 回忆上次内容 上次研究了 一行赋值多个变量 a b 5a, b 7, 8 还研究了 标识符的惯用法 python使用的是 snake_case蛇形命名法用下划线 分隔开小写字母的 方法这样就可以 更合理地 命名变量了 变量变量 能变的量我可以 手工输入变量的值 吗&#xff1f;&#x1f9…

MongoDB 数据库数据导入 - 关于如何使用 csv 导入数据的命令方法、图形界面可视化导入方法

序言 兴趣使然&#xff0c;突发奇想&#xff0c;想到了就写&#xff0c;就当打发时间了。 一、使用 csv 导入数据的命令方法 csv文件路径问题&#xff0c;绝对路径和相对路径都可以 方法1 type 没有号&#xff0c;也是可以的&#xff0c;空格自动识别 将测试表.csv 文件导…

pikachu靶场-csrf

csrf 跨站请求伪造&#xff08;英语&#xff1a;Cross-site request forgery&#xff09;&#xff0c;也被称为 one-click attack 或者 session riding&#xff0c;通常缩写为 CSRF 或者 XSRF&#xff0c; 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方…

【C++ 六】内存分区、引用

内存分区、引用 文章目录 内存分区、引用前言1 内存分区模型1.1 程序运行前1.2 程序运行后1.3 new 操作符 2 引用2.1 引用基本使用2.2 引用注意事项2.3 引用做函数参数2.4 引用做函数返回值2.5 引用本质2.6 常量引用 总结 前言 本文包含内存分区、引用基本使用、引用注意事项、…

记一次完整的rc.local中启动python脚本报psutil找不到问题解决

文章目录 1&#xff0c;问题1.1&#xff0c;rc.local1.2&#xff0c;watchdog.py 2&#xff0c;问题排查2.1&#xff0c;手动执行start.sh后功能正常2.2&#xff0c;开机启动后rc.local加载start.sh&#xff0c;然后start.sh启动python脚本报错2.3&#xff0c;怀疑是rc.local加…

SAP S/4HANA不是ERP了?

今天浏览了一下SAP官方帮助&#xff08;Help&#xff09;网站&#xff0c;有一个意外的发现&#xff0c;如上图&#xff1a;SAP S/4HANA和SAP ERP是分别显示的&#xff0c;这让我想起了前段时间一个朋友和我说&#xff1a;“S/4HANA现在都不叫ERP了&#xff0c;因为里面包括了超…

【C++初阶】C++入门(一):命名空间C++的输入输出缺省参数函数重载

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 1.什么是C1.1 C的发…

最新Tuxera NTFS2023最新版Mac读写NTFS磁盘工具 更新详情介绍

Tuxera NTFS for Mac是一款Mac系统NTFS磁盘读写软件。在系统默认状态下&#xff0c;MacOSX只能实现对NTFS的读取功能&#xff0c;Tuxera NTFS可以帮助MacOS 系统的电脑顺利实现对NTFS分区的读/写功能。Tuxera NTFS 2023完美兼容最新版本的MacOS 11 Big Sur&#xff0c;在M1芯片…

Python统计学:如何理解样本统计量?

本期介绍样本统计量是怎么算的&#xff0c;并用Python来模拟随机抽样。用一个在鱼塘捞鱼的简单例子来理解样本均值的概念。 如何理解重复试验&#xff1f; 指能够在完全相同条件下进行多次的试验&#xff1b; 比如我们抛10枚硬币&#xff0c;用来计算正面出现的概率&#xff…

4.7 贝塞尔曲线

学习目标&#xff1a; 学习贝塞尔曲线可以遵循以下步骤&#xff1a; 1.了解基本概念和定义&#xff1a;学习贝塞尔曲线前需要了解贝塞尔曲线的基本概念和定义&#xff0c;如何定义一条贝塞尔曲线、控制点的概念以及贝塞尔曲线的几何性质等。 2.学习贝塞尔曲线的构造方法&…

Django搭建一个简易GPT网站

文章目录 环境安装创建主项目和应用程序在 settings.py 文件中注册应用程序在 views.py 文件中为应用程序创建视图配置应用程序的 URL创建和渲染模板KEY实现发送提示功能注意事项完整源码 环境安装 pip install django openai创建主项目和应用程序 处理完项目的环境后&#x…

第二个机器学习应用:乳腺癌数据集在决策树模型上的挖掘

目录 决策树优化与可视化 1 决策树分类 2 决策树可视化 3 显示树的特征重要性 特征重要性可视化 决策树回归 1 决策树回归 决策树优化与可视化 1 决策树分类 from sklearn.datasets import load_breast_cancer from sklearn.tree import DecisionTreeClassifier from sk…

基于C++开发的医院医学影像PACS 可二次开发,三维重建

医学影像PACS系统源码&#xff0c;集成三维影像后处理功能&#xff0c;包括三维多平面重建、三维容积重建、三维表面重建、三维虚拟内窥镜、最大/小密度投影、心脏动脉钙化分析等功能。系统功能强大&#xff0c;代码完整。有演示。 本套PACS系统专门针对医院工作流程设计的&am…

分布式ID生成策略总结

1、UUID 2、数据库自增ID 2.1、主键表 2.2、ID自增步长设置 3、号段模式 4、Redis INCR 5、雪花算法 6、美团(Leaf) 7、百度(Uidgenerator) 8、滴滴(TinyID) 总结比较 背景 在复杂的分布式系统中&#xff0c;往往需要对大量的数据进行唯一标识&#xff0c;比如在对…