6.移除元素

ops/2024/10/22 18:36:31/

文章目录

  • 题目简介
  • 题目解答
    • 解法一:双指针
      • 代码:
      • 复杂度分析:
    • 解法二:双指针优化
      • 代码:
      • 复杂度分析:
  • 题目链接

大家好,我是晓星航。今天为大家带来的是 相关的讲解!😀

题目简介

image-20240507214021068

image-20240507214030508

题目解答

解法一:双指针

代码:

java">class Solution {public int removeElement(int[] nums, int val) {int n = nums.length;int left = 0;for (int right = 0;right < n;right++) {if (nums[right] != val) {nums[left] = nums[right];left++;}}return left;}
}

使用双指针:右指针 right指向当前将要处理的元素,左指针 left指向下一个将要赋值的位置。

那么此时情况就很简单了,之有两种right指向的元素等于val,right指向的元素不等于val。

  • 如果右指针指向的元素不等于 val,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移(left++ right++);
  • 如果右指针指向的元素等于 val,它不能在输出数组里,此时左指针不动,右指针右移一位(right++)。

最后题目要求返回移除后数组的新长度,就是left的长度,我们直接返回整型left即可。

复杂度分析:

image-20240507214448941

解法二:双指针优化

这里也是使用的双指针,但是这里效率比第一种解法要高,为什么呢,且听我细细道来。

思路:如果要移除的元素恰好在数组的开头,例如序列[1,2,3,4,5],当 val为 1时,我们需要把每一个元素都左移一位。注意到题目中说:「元素的顺序可以改变」。实际上我们可以直接将最后一个元素 5 移动到序列开头,取代元素 1,得到序列[5,2,3,4],同样满足题目要求。这个优化在序列中 val\textit{val}val 元素的数量较少时非常有效。

代码:

java">class Solution {public int removeElement(int[] nums, int val) {int left = 0;int right = nums.length;while(left < right) {if (nums[left] == val) {nums[left] = nums[right - 1];right--;} else {left++;}}return left;}
}

通过代码分析,我们直接将双指针指向数组的开头和结尾,然后我们使用while进行死循环,直到left>=right跳出,当我们左指针等于要删除的值val时,我们直接将左指针的值指向右指针的值然后右指针减减,继续循环。如果左指针的值不等于val那么左指针就直接加加往右走。直到我们左指针和右指针相遇就跳出循环,此时我们左指针的值就是我们数组的长度大小。

这个方法的好处是我们只需要遍历数组一次就可以解答完成。

复杂度分析:

image-20240507220803661

题目链接

27. 移除元素 - 力扣(LeetCode)

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘


http://www.ppmy.cn/ops/37094.html

相关文章

短视频矩阵系统ai剪辑 矩阵 文案 无人直播四合一功能核心独家源头saas开发

抖去推矩阵AI小程序是一款针对短视频平台的智能创作和运营工具&#xff0c;它具有以下功能特点&#xff1a; 1.批量视频生成&#xff1a;抖去推可以在短时间内生成大量视频&#xff0c;帮助商家快速制作出适合在短视频平台上推广的内容 2.全行业覆盖&#xff1a;适用于多个行业…

关于YOLO8学习(六)安卓部署ncnn模型--图片检测

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 关于YOLO8学习(三)训练自定义的数据集 关于YOLO8学习(四)模型转换为ncnn 关于YOLO8学习(五)安卓部署ncnn模型–视频检测 简介 前文第五章,讲述了部署自定义模型后,进…

matlab

图像配准&#xff1a; %手动选择执行图片(由于程序为分开&#xff0c;此处保存的mat文件为图MRI6的信息&#xff0c;所以请选择图MRI6) [filename,pathname]uigetfile({*.jpg;*.bmp;*.tif;*.png;*.gif,All Image Files;*.*,All Files}); image imread([pathname,filename]); …

vue2 webpack-dev-server Unknown promise rejection reason

在vue.config.js中添加如下配置&#xff0c;重启项目即可 module.exports defineConfig({devServer: {client: {overlay: false,},} })参考

tensorrt,tensorrtllm优化原理

tensorrt 1.算子融合 水平融合&#xff0c;垂直融合&#xff0c;删除冗余 计算图优化的目标是对计算图进行等价的组合变换&#xff0c;使得减少算子的读写操作提供效率。模型中有很多层&#xff0c;在部署模型推理时&#xff0c;每一层的运算操作都是由GPU完成的&#xff0c;但…

【如此简单!数据库入门系列】之效率基石 -- 磁盘空间管理

文章目录 1 前言2 磁盘空间管理3 磁盘空间管理的实现4 存储对象关系5 总结6 系列文章 1 前言 如何将表中的记录存储在物理磁盘上呢&#xff1f; 概念模式中&#xff0c;记录&#xff08;Record&#xff09;表示表中的一行数据&#xff0c;由多个列&#xff08;字段或者属性&…

彻底解决python的pip install xxx报错(文末附所有依赖文件)

今天安装pip install django又报错了&#xff1a; C:\Users\Administrator>pip install django WARNING: Ignoring invalid distribution -ip (d:\soft\python\python38\lib\site-pac kages) Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting djan…

重新规划路线

题目链接 重新规划路线 题目描述 注意点 题目数据 保证 每个城市在重新规划路线方向后都能到达城市 02 < n < 5 * 10^4connections.length n-1connections[i].length 20 < connections[i][0], connections[i][1] < n-1connections[i][0] ! connections[i][1] …