数据结构 ——— 移除 nums 数组中的 val 元素(快慢指针)

news2024/9/27 11:38:55

目录

题目要求

代码实现(快慢指针)


题目要求

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

不能使用额外的数组空间,要保证 算法的空间复杂度在 O(1)

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


代码实现(快慢指针)

代码演示:

int removeElement(int* nums, int numsSize, int val)
{
	int slow = 0;
	
    // 循环1
	for (int fast = 0; fast < numsSize; fast++)
	{
		if (nums[fast] != val)
		{
			nums[slow] = nums[fast];
			slow++;
		}
	}

	return slow;
}

代码解析:

创建两个 int 类型的变量,slow 和 fast ,用来充当 nums 数组的快慢指针的作用

slow 的作用是从 nums 数组的起始位置开始存储非 val 的值,成功存储了一个非 val 的值后,slow 才会指向下一个位置,也就是 slow 自增 1

fast 的作用是从 nums 数组的起始位置开始找到非 val 的值,找到后就赋值给 nums[slow] ,然后再往后找非 val 的值,直到找完 nums 数组的最后一个元素

代码验证:

算法的时间复杂度:

循环1 执行了 N 次,每次循环内部执行了常数次

得出算法的时间复杂度(大O渐进表示法):O(N)

算法的空间复杂度:

没有开辟额外的临时空间,是在原 nums 数组上操作的

得出算法的空间复杂度(大O渐进表示法):O(1)

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

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

相关文章

11.全面学习面向对象技术

面向对象开发 相关概念 对象&#xff1a;由数据及其操作所构成的封装体&#xff0c;是系统中用来描述客观事务的一个实体&#xff0c;是构成系统的一个基本单位。一个对象通常可以由对象名、属性和方法3个部分组成。类&#xff1a;现实世界中实体的形式化描述&#xff0c;类…

MySQL_插入、更新和删除数据

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

如何禁止电脑蓝牙?五个有效方法教给你!小白必看!

在生活和工作中&#xff0c;蓝牙是一种非常方便的无线技术&#xff0c;可以连接鼠标、键盘、耳机等设备。 然而&#xff0c;蓝牙同时也是信息泄露的潜在渠道&#xff0c;特别是在公共场所或公司内部环境中&#xff0c;可能会带来安全隐患。 想要保护隐私或防止电脑与未经授权…

基于YOLOv8目标检测与chef-transformer(T5)从图像创建食谱

前言 在本文中&#xff0c;将演示如何使用从Roboflow获得的开源产品数据来训练我的YOLOv8模型&#xff0c;然后将其与从Hugging Face获得的chef-transformer&#xff08;T5&#xff09;模型集成。应用程序的主要目标是将检测到的对象参数化地发送到语言模型&#xff0c;并在NL…

第05-3节:加载流程原理介绍(Done)

我的后端学习大纲 我的Linux学习大纲 本节目标 1.能够说出交互式Shell与非交互式Shell2.能够说出登录Shell与非登录Shell环境 1.1.Shell工作环境介绍 用户进入linux系统就会初始化Shell环境, 这个环境会加载全局配置文件和用户个人配置文件中环境变量.每个脚本文件都有自己的…

STM32嵌入式编程学习到提高:【4】UART串口打印

------------------------------------------------------------------------------------------------------------------------- 工程文件&#xff1a;放在百度云盘里&#xff0c;需要的自行下载&#xff01;&#xff01;&#xff01; 链接: https://pan.baidu.com/s/14gRne…

2万字长文助你快速入门AIGC:包含底层原理、应用场景、热门工具、行业现状…

最近大家热议的ChatGPT和AI绘画工具的底层技术原理是什么&#xff1f;是如何发展到现在的&#xff1f;有哪些应用场景、热门工具&#xff1f;AIGC产业上下游有哪些公司&#xff1f;作为普通用户&#xff0c;我们还能接触哪些应用AI技术打造的商业解决方案&#xff1f;…… 我们…

RK 方案VOP 显示接口的链接关系以及DTS如何配置

这图显示各vp 支持情况 如下图VP0 支持DSI0 DSI1 EDP LVDS HDMI 显示接口&#xff0c;如果我们一方案需要点MIPI 屏 和HDMI out, 如果VP0 链接MIPI DSI0 那么VP0 就不能再选择了&#xff0c;只能VP1 链接HDMI out 了。因为VP2不至此HDMI&#xff0c;所有就只有选择VP1 链接HDMI…

随记——机器学习

前言 本来有个500块钱的单子&#xff0c;用机器学习做一个不知道什么鸟的识别&#xff0c;正好有数据集&#xff0c;跑个小项目&#xff0c;过一下机器学习图像识别的流程&#xff0c;用很短的时间记录下来..... 一、数据预处理 将数据集分为训练集和测试集&#xff0c;直接…

【HarmonyOS】SaveButton保存图片

SaveButton组件把图片显示到相册中的方法demo&#xff0c;支持组件截图、url网络图片、base64格式图片。注意事项&#xff1a; 1、不支持自定义SaveButton样式。 2、下载按钮被遮挡一部分&#xff0c;也无法保存到相册。 import photoAccessHelper from ohos.file.photoAcces…

使用 pypdf 给 PDF 添加目录书签

""" dir.txt的形式 第1章 计算机系统基础知识 1 1.1 嵌入式计算机系统概述 1 1.2 数据表示 4 1.2.1 进位计数制及转换 4 1.2.2 数值型数据的表示 6 第2章 嵌入式系统硬件基础知识 56 2.1 数字电路基础 56 2.1.1 信号特征 56 2.1.2 组合逻辑电路和时序逻辑电路 5…

为什么现在的网站设计大多都非常简洁,越来越扁平化

网站设计趋向简洁和扁平化&#xff0c;反映了现代设计理念的转变和技术的进步。以下是对这一现象的具体分析&#xff1a; 用户体验优先&#xff1a;用户更倾向于简单直接的界面&#xff0c;这有助于快速找到所需信息。扁平化设计通过减少视觉干扰&#xff0c;使得内容更加突出…

哪些因素会影响六西格玛效果的显现时间?

在探讨哪些因素会影响六西格玛效果的显现时间时&#xff0c;我们不得不深入剖析六西格玛管理方法的本质及其在企业中的实施过程。六西格玛作为一种旨在通过减少缺陷和变异来提高产品和服务质量的策略&#xff0c;其成功实施并非一蹴而就&#xff0c;而是受到多种复杂因素的共同…

Llama 系列简介与 Llama3 预训练模型推理

1. Llama 系列简介 1.1 Llama1 由 Meta AI 发布&#xff0c;包含 7B、13B、33B 和 65B 四种参数规模的开源基座语言模型 数据集&#xff1a;模型训练数据集使用的都是开源的数据集&#xff0c;总共 1.4T token 模型结构&#xff1a;原始的 Transformer 由编码器&#xff08…

Git 与远程分支

90.远程仓库和分支 我们经常需要对远程仓库里的分支进行更新。 ‍ 当从远程库 clone 时&#xff0c;默认情况下&#xff0c;只会拉取 master ​分支&#xff0c;并且会将本地的 master 分支和远程的 master 分支关联起来&#xff1a; $ git branch * master‍ ‍ 推送本地…

什么是分布式缓存,它是如何工作的?

嗨&#xff0c;你好啊&#xff0c;我是猿java 在日常开发中&#xff0c;我们经常会使用到缓存&#xff0c;当数据集较小时&#xff0c;通常将所有缓存数据保存在一台服务器上就足够了&#xff0c;但是当数据集较大时&#xff0c;我们需要将缓存数据分布在多个服务器上&#xf…

无线领夹麦克风怎么挑选?选购麦克风需要注意的五大选购陷阱!

无线领夹麦克风只所以成为现在自媒体行业的主流拾音设备&#xff0c;很大程度取决于它的轻巧的设计以及便携性。相较于传统的手持麦克风&#xff0c;领夹麦在使用时无需手持&#xff0c;直接佩戴在衣领上即可使用&#xff0c;腾出的双手可以更好的投入到录制当中&#xff0c;在…

Python与SQL Server数据库结合导出Excel并做部分修改

Python与SQL Server数据库结合导出Excel并做部分修改 需求&#xff1a;在数据库中提取需要的字段内容&#xff1b;并根据字段内容来提取与拆分数据做为新的列最后导出到Excel文件 # -*- coding: utf-8 -*- import pandas as pd import re import pymssql import timestart_ti…

Activiti的Web在线工作流设计器的几种搭建方式

说明 Activiti Activiti是一个使用Java开发的工作流流程管理(BPM)平台&#xff0c;可以帮助开发者和企业自动化管理业务流程。它提供了一整套工具&#xff0c;用于定义、执行、监控和优化业务流程。Activiti支持BPMN 2.0标准&#xff0c;具有强大的扩展能力和易用性&#xff…

Git GUI操作流程

1&#xff0c;点击运行 Gt GUI 2&#xff0c;界面如下 3&#xff0c;点击Creat new Repository或者在菜单栏点击Repository--new 4,点击Browse选择目录&#xff0c;点击create&#xff0c;创建本地git仓库 5&#xff0c;对应盘里生成一个.git文件&#xff0c;用于版本管理 6&am…