LeetCode【0027】移除元素

本文目录

  • 1 中文题目
  • 2 求解方法:快慢双指针
    • 2.1 方法思路
    • 2.2 Python代码
    • 2.3 复杂度分析
  • 3 题目总结

1 中文题目

给定一个数组 nums 和一个值 val,需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。假设 nums 中不等于 val 的元素数量为 k,要通过此题,需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k

判断标准

评测机将使用以下代码测试提交的代码:

int[] nums = [...]; // 输入数组
int val = ...; // 要移除的值
int[] expectedNums = [...]; // 长度正确的预期答案。// 它以不等于 val 的值排序。int k = removeElement(nums, val); // 调用你的实现assert k == expectedNums.length;
sort(nums, 0, k); // 排序 nums 的前 k 个元素
for (int i = 0; i < actualLength; i++) {assert nums[i] == expectedNums[i];
}

如果所有的断言都通过,代码将会通过。

示例:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2,_,_]
解释:函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。
输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3,_,_,_]
解释:函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。
注意这五个元素可以任意顺序返回。返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

提示:

  • 0 ≤ n u m s . l e n g t h ≤ 100 0 \leq nums.length \leq 100 0nums.length100
  • 0 ≤ n u m s [ i ] ≤ 50 0 \leq nums[i]\leq 50 0nums[i]50
  • 0 ≤ v a l ≤ 100 0 \leq val \leq 100 0val100

2 求解方法:快慢双指针

2.1 方法思路

方法核心

使用快慢双指针(left和right)遍历数组,left指向新数组待插入位置,right遍历原数组。原地修改数组,不使用额外空间

实现步骤

  • 初始化:
    • 处理空数组特殊情况
    • left指针指向0位置
  • 遍历过程:
    • right指针遍历整个数组
    • 遇到不等于val的元素时,移动到left位置
    • left指针向右移动
  • 结束条件:
    • right遍历完整个数组
    • 返回left的值(新数组的长度)

方法示例

输入:nums = [3,2,2,3], val = 3过程演示:
初始状态:
[3,2,2,3]
l
r1. right=0,nums[0]=3[3,2,2,3]
l r2. right=1,nums[1]=2[2,2,2,3]l   r3. right=2,nums[2]=2[2,2,2,3]l   r4. right=3,nums[3]=3[2,2,2,3]l     r最终结果:
返回值:2
数组前2个元素:[2,2]

2.2 Python代码

class Solution:def removeElement(self, nums: List[int], val: int) -> int:# 如果数组为空,直接返回0if not nums:return 0# 双指针:left指向新数组待插入位置,right指向当前处理的元素left = 0# 遍历数组for right in range(len(nums)):# 如果当前元素不等于要删除的值if nums[right] != val:# 将该元素移动到left指向的位置nums[left] = nums[right]# left指针右移left += 1# 返回新数组的长度return left

2.3 复杂度分析

  • 时间复杂度:O(n), n是数组长度
    • 只需要遍历一次数组
    • 每个元素最多被访问一次
  • 空间复杂度:O(1)
    • 只使用了两个指针变量
    • 原地修改数组,不使用额外空间

3 题目总结

题目难度:简单
数据结构:数组
应用算法:双指针

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

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

相关文章

STM32F407简单驱动步进电机(标准库)

配置 单片机型号&#xff1a;STM32F104ZGT6 步进电机&#xff1a;YK28HB40-01A 驱动器&#xff1a;YKD2204M-Plus 接线方式&#xff1a; pu&#xff1a;接对应的产生PWM的引脚&#xff0c;这里接PF9&#xff0c;对应TIM14_CH1通道&#xff01; pu-&#xff1a;接单片机的G…

linux-DNS解析

dns解析 dns&#xff1a;域名系统&#xff0c;将域名和ip地址互相映射的一个分布式的数据库&#xff0c;方便用户访问互联网。 ip地址&#xff1a;是所有设备和网站在互联网上的唯一地址&#xff0c;通信一定是ip和ip之间的通信。 dns解析&#xff1a;根据域名在互联网当中找…

光伏电站容量计算方法科普

光伏电站的容量计算是设计和评估光伏系统性能的关键步骤。通过了解光伏电站的容量&#xff0c;我们可以预估其发电量&#xff0c;优化系统设计&#xff0c;并确保系统能满足电力需求。本文将详细介绍几种常见的光伏电站容量计算方法&#xff0c;并特别介绍小程序“光伏一点通”…

采集opc da 转 profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 应用条件 2 4 查看OPC DA服务器的相关参数 2 5 配置网关采集opc da数据 4 6 用profinet IO协议转发数据 6 7 在服务器上运行仰科OPC DA采集软件 9 8 案例总结 11 1 案例说明 在OPC DA服务器上运行OPC DA client软件查看OPC DA服务…

循环矩阵和BCCB矩阵与向量乘积的快速计算——矩阵向量乘积与频域乘积之间的转换

目录 循环矩阵循环矩阵的定义特征值与特征向量循环矩阵的对角化 循环矩阵与向量的乘积 BCCB矩阵BCCB矩阵的定义BCCB矩阵的对角化BCCB 矩阵与向量的乘积BCCB 矩阵与向量乘积的实现 总结 循环矩阵&#xff08;Circulant Matrix&#xff09;和块循环对称矩阵&#xff08;Block Cir…

(动画版)排序算法 -希尔排序

文章目录 1. 希尔排序&#xff08;Shellsort&#xff09;1.1 简介1.2 希尔排序的步骤1.3 希尔排序的C实现1.4 时间复杂度1.5 空间复杂度1.6 希尔排序动画 1. 希尔排序&#xff08;Shellsort&#xff09; 1.1 简介 希尔排序&#xff08;Shells Sort&#xff09;&#xff0c;又…

蓝桥杯每日真题 - 第7天

题目&#xff1a;&#xff08;爬山&#xff09; 题目描述&#xff08;X届 C&C B组X题&#xff09; 解题思路&#xff1a; 前缀和构造&#xff1a;为了高效地计算子数组的和&#xff0c;我们可以先构造前缀和数组 a&#xff0c;其中 a[i] 表示从第 1 个元素到第 i 个元素的…

socketcan-goloang

模拟接收 模拟发送 package mainimport ("context""fmt""go.einride.tech/can""go.einride.tech/can/pkg/candevice""go.einride.tech/can/pkg/socketcan" )func main() {// linux系统设置// sudo ip link add dev can0 ty…

Java期末复习暨学校第五次上机课作业

Java期末复习暨学校第五次上机课作业&#xff1a;掌握类的定义、掌握类的封装、熟悉类的成员方法的调用。 第一题&#xff1a; 先定义两个整形变量x和y&#xff0c;然后showMessage方法打印防御塔的位置。 然后通过new关键字实例化了一个TowerDefense对象t1,并把x赋值为3&…

【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测

【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测 文章目录 【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测前言YOLOV5模型运行环境搭建YOLOV5模型运行数据集准备YOLOV5运行模型训练模型验证模型推理 总结 前言 Ultralytics YOLO 是一…

【启明智显分享】5G CPE与5G路由器到底有什么区别?

5G路由器和5G CPE在功能和应用场景上存在很明显的差异&#xff0c;小编做了详细比较&#xff0c;希望能帮助到你进一步了解他们的区别及应用。 一、定义与功能 5G路由器 5G路由器是一个将5G网络连接转换为Wi-Fi信号的设备&#xff0c;使多个Wi-Fi设备可以通过5G网络进行连接…

【go从零单排】File Paths文件路径

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 在 Go 中&#xff0c;处理文件路径通常使用 path/filepath 包。这个包提供了一系…

【数据分享】中国渔业统计年鉴(1979-2024) pdf

数据介绍 一、《中国渔业统计年鉴》以正式出版年份标序。其统计数据起讫日期:渔民家庭收支调查起讫时间为 2022年11月1日至2023年10月31日&#xff0c;其他数据起讫时间为2023年1月1日至2023年12月31日。 二、统计数据中&#xff0c;远洋渔业数据按照远洋渔业管理办法进行统计…

Windows10“大限”将至或加速政企信创进程

近日&#xff0c;微软公司正式宣布将于2025年10月14日终止对Windows 10系统的支持服务。Windows 10“退休”在即&#xff0c;信息安全风险陡增——对此&#xff0c;360织语的安全专家认为&#xff0c;对于政企用户而言&#xff0c;不管是选择继续使用Windows 10&#xff0c;还是…

文本嵌入方案大总结:从词向量到句向量

这里写目录标题 文本嵌入方案总结一、文本嵌入三种层次 词向量应用&#xff1a; 句向量应用&#xff1a; 扩展&#xff1a;文本嵌入和句子相似度、文本匹配的逻辑关系&#xff1f; 二、词向量有哪些方案、优缺点、工具&#xff1f;方案一&#xff1a;统计编码方案二&…

第23天Linux下常用工具(二)

目录 第四章 GDB调试工具 4.1gdb的作用 4.2调试代码的流程 4.3gdb的安装 4.4 gdb的使用 第五章 makefile工程管理工具 5.1makefile的作用 5.2makefile的运行 5.3make的安装 5.4makefile的编写方法 5.5makefile的语法 5.6makefile使用示例 第四章 GDB调试工具 4.1g…

ubuntu22.04与ubuntu24.10使用Remmina远程桌面共享

1. ubuntu22.04启用远程桌面共享 点击Remote Desktop,按下图设置 成功启用 2.ubuntu24.10远程桌面启用 选择远程桌面选项 启用远程桌面共享与远程控制 启用远程登陆

基于51单片机的高压锅控制系统proteus仿真

地址&#xff1a; https://pan.baidu.com/s/16BuxmKYUprTGbkEj_BWGvQ 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…

D3的竞品有哪些,D3的优势,D3和echarts的对比

D3 的竞品 ECharts: 简介: ECharts 是由百度公司开发的一款开源的 JavaScript 图表库&#xff0c;提供了丰富的图表类型和高度定制化的配置选项。特点: 易于使用&#xff0c;文档详尽&#xff0c;社区活跃&#xff0c;支持多种图表类型&#xff08;如折线图、柱状图、饼图、散点…

2024年11月13日

1.创业法律指南 留置权和其他三个权 定金和订金 一般保证和连带保证 1.案例 物权编之担保法律制度案例一 冯系养鸡专业户&#xff0c;为改建鸡会和引进良种需资金20万元。冯向陈借款10万元&#xff0c;以自己的一套价值10万元的音响设备抵押&#xff0c;双方立有抵押字据&a…