力扣刷题27.移除元素(Accept03)

news2024/11/23 14:51:25

力扣刷题

代码随想录数组 3.移除元素

力扣27. 移除元素

方法一:暴力解决法

1. 思路

两层嵌套循环遍历数组,内层循环主要是当第一层循环遍历到的元素等于要移除的元素的值的时候,其后的元素依次向前挪动一个位置(覆盖要删除的元素的位置)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xY6klCgK-1689904005137)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/046595b6-3781-4cfb-8b3b-42a32b42294b/Untitled.png)]

编译出错:cannot assign a value to final variable length

为什么报错?因为Java中数组是不允许被修改长度的!这是Java安全性的体现之一。

数组的内存是连续分配的,当我们增加数组长度时,就可能导致别的变量被覆盖;而减少长度的话,可能会突然空出来一个内存空间。

2. 正确解题代码

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
class Solution {
    public int removeElement(int[] nums, int val) {
        int size = nums.length; //定义成一个变量,但它并不是数组的实际长度
        for(int i = 0; i < size; i++){
            if(nums[i] == val){
                for(int j = i; j < size - 1; j++){
                    nums[j] = nums[j+1];
                }
                size--;  //这是我们认为的数组移除某元素之后的长度(但数组的实际长度并没有变化)
                i--; //当前的元素已经被后一个元素所替代,又因为等会要i++,所以应该先向前挪动一个
            }
        }
        return size;
    }
}

方法二:同向双指针(快慢指针)

class Solution {
    public int removeElement(int[] nums, int val) {
				//同向双指针
        //快指针是遍历数组的时候找值不为val的元素,
				//慢指针是用来得到新的数组长度(覆盖要移除的元素的位置)
        int slowIndex = 0;
        for(int fastIndex = 0; fastIndex < nums.length; fastIndex++){
            if(nums[fastIndex] != val){
                nums[slowIndex++] = nums[fastIndex];
            }
        }
        return slowIndex;
    }
}

方法三:相向双指针

class Solution {
    public int removeElement(int[] nums, int val) {
        //相向双指针
        //左指针是用来得到新的数组长度(覆盖要移除的元素的位置),
				//右指针是从右边开始向左边遍历找值不为val的元素
        int rightIndex = nums.length - 1;
        int leftIndex = 0;
        while(rightIndex >= 0 && nums[rightIndex] == val) rightIndex--;
        while(leftIndex <= rightIndex){
            if(nums[leftIndex] == val){ //当左指针指向的元素等于要移除的值,则用右指针的元素值进行覆盖
                nums[leftIndex] = nums[rightIndex--];
            }
            leftIndex++; //左指针向前继续挪动
            while(rightIndex >= 0 && nums[rightIndex] == val) rightIndex--;//右指针继续寻找下一个值不为val的元素
        }
        return leftIndex;
    }
}

同向与相向的对比:

  1. 同向双指针最后元素的相对位置没有发生变化,而相向双指针最后的元素相对位置可能发生变化,即数组的相对顺序发生了改变
  2. 同向双指针和相向双指针两者的时间复杂度及空间复杂度都是一样的
    1. 时间复杂度:O(n)
    2. 空间复杂度:O(1)

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

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

相关文章

计科web常见错误排错【HTTP状态404、导航栏无法点开、字符乱码及前后端数据传输呈现、jsp填写的数据传到数据库显示null、HTTP状态500】

web排错记录 在使用javaweb的过程中会出现的一些错误请在下方目录查找。 目录 错误1&#xff1a;HTTP状态404——未找到 错误2&#xff1a;导航栏下拉菜单无法点开的问题 错误3&#xff1a;字符乱码问题 错误4&#xff1a;jsp网页全部都是&#xff1f;&#xff1f;&#x…

科技云报道:边缘云赛道开启,谁能成为首个“出线”厂商?

科技云报道原创。 每一轮底层技术变革&#xff0c;都会带来全新的商业机遇。随着万物智联时代到来&#xff0c;大量数据产生的源头由传统的中心化向分散数据源变革&#xff0c;越来越多云边协同场景的出现&#xff0c;使得边缘云成为计算领域数据处理的新范式之一。 自2020年…

CHI协议保序之Compack保序

一致性系统中&#xff0c;使用三种保序方式&#xff1b; Completion ack response ⭕Completion acknowledgment&#xff1a; □ 该域段主要是用来&#xff0c; □ 决定 RN 发送的 trans&#xff0c;与其他 RN 发送的命令产生的 SNP 之间的顺序&#xff1b; …

[VUE]Element_UI 实现TreeSelect 树形选择器

文章目录 前言1、安装2、引用3、使用 前言 最近在做一个人员管理系统&#xff0c;在增改用户信息时&#xff0c;可能会设置用户所在的部门&#xff0c;因为部门是多级的&#xff0c;于是想到用Element_UI的TreeSelect组件实现 效果&#xff1a; 1、安装 npm install --save…

蓝桥杯专题-真题版含答案-【牌型种数】【煤球数目】【寒假作业】【奖券数目】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

如何动态修改 spring aop 切面信息?让自动日志输出框架更好用

业务背景 很久以前开源了一款 auto-log 自动日志打印框架。 其中对于 spring 项目&#xff0c;默认实现了基于 aop 切面的日志输出。 但是发现一个问题&#xff0c;如果切面定义为全切范围过大&#xff0c;于是 v0.2 版本就是基于注解 AutoLog 实现的。 只有指定注解的类或…

pytest常用执行参数详解

1. 查看pytest所有可用参数 我们可以通过pytest -h来查看所有可用参数。 从图中可以看出&#xff0c;pytest的参数有很多&#xff0c;下面是归纳一些常用的参数&#xff1a; -s&#xff1a;输出调试信息&#xff0c;包括print打印的信息。-v&#xff1a;显示更详细的信息。…

GAN在图像超分辨领域的应用

本篇博客介绍了对抗生成网络GAN在图像超分辨领域的应用&#xff0c;包括(SRGAN, ESRGAN, BSRGAN, Real-ESRGAN),详细介绍了论文内容&#xff0c;方法&#xff0c;网络结构并对其做了相关总结。相关GAN原理的介绍大家可以查看我之前的几篇博客&#xff0c;链接如下&#xff1a;生…

从用户的角度谈GPT时代技术突破的两大关键逻辑

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

API接口:如何通过使用手机归属地查询

随着手机普及率的不断增加&#xff0c;手机号码的信息查询也成为了一个非常实用的功能。本文将介绍如何通过使用手机归属地查询API接口实现查询手机号码所在地的功能。 首先&#xff0c;我们需要一个可以查询手机号码所在地的API接口。目前市面上有很多免费或付费的API接口可供…

MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点6:MySQL Enterprise Monitor之Query Analyzer

文章目录 MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点6&#xff1a;MySQL Enterprise Monitor之Query AnalyzerMySQL Enterprise Monitor之Query AnalyzerQuery Response Time index (QRTi)例题例题1: Query Analyzer答案与解析1 参考 【免责声明】文章仅供学习交流&#x…

RT1052的GPIO

文章目录 GPIO资源GPIO资料GPIO复用器IOMUXGPIO的控制块 GPIO配置宏定义的使用 GPIO函数使用GPIO_PinRead 函数GPIO_WritePinOutput函数 GPIO资源 图中 P2、P3 和 P6 为 MCU 主 IO 引出口&#xff0c;这三组排针共引出了 97 个 IO 口&#xff0c;另外&#xff0c;通过&#xff…

深度理解BeanFactory和ApplicationContext的区别

BeanFactory和ApplicationContext 接口及其子类图 这是Spring一部分的关系类图,从这个类图我们可以大致看出BeanFactory的和ApplicationContext的关系,BeanFactory是ApplicationContext的基类,BeanFactory所拥有的功能,ApplicationContext都拥有, 不仅如此,ApplicationContext还…

【Docker 的数据管理和网络通信】

目录 一、Docker 的数据管理1&#xff0e;数据卷2&#xff0e;数据卷容器 二、容器互联&#xff08;使用centos镜像&#xff09;三、Docker 镜像的创建1&#xff0e;基于现有镜像创建&#xff08;1&#xff09;首先启动一个镜像&#xff0c;在容器里做修改&#xff08;2&#x…

C# Yolo+Onnx 号牌识别

参考 https://github.com/missxingwu/net_yolov5_plate https://github.com/ivilson/Yolov7net https://github.com/we0091234/Chinese_license_plate_detection_recognition 效果 项目 VS2022.net 4.8OpenCvSharp4Microsoft.ML.OnnxRuntime 部分代码 using System; using …

xDS解决的是什么样子的痛点

xDS基本概念 Istio发现模型 xDS是什么 xDS是一类发现服务的总称&#xff0c;包含LDS&#xff0c; RDS&#xff0c; CDS&#xff0c; EDS以及SDS。 Envoy通过xDS API可以动态获取Listener&#xff08;监听器&#xff09;&#xff0c;Route&#xff08;路由&#xff09;&#x…

Python 集合 union()函数使用详解,Python合并集合

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 union函数使用详解 1、合并多个集合2、合并其他类型2.1、合并字符串2.2、合并列表…

性能测试Ⅲ

JMeter里面使用后端监听器&#xff0c;结合influxdb的时序数据库以及grafana可以打造性能测试的平台 后端监听器&#xff1a;把JMeter执行过程中的数据写到influxDB的时序数据库 influxD&#xff1a;时序数据库&#xff0c;用来存储JMeter发送请求的数据 Grafana &#xff1a;从…

k8s容器入门

一、k8s入门 1.什么是容器 降低虚拟机造成的物理主机资源浪费&#xff0c;提高物理主机的利用率&#xff0c;并能提供像虚拟机一样狼好的应用程序隔离运行环境&#xff0c;人们把这种轻量型的虚拟机&#xff0c;称为容器。 2. 容器的管理工具 主要用于容器的创建、启动、关…

优化transformer

使用transformer而导致的时间长&#xff0c;可能会由于self-attention计算Query和key的值才导致的时间长&#xff0c;也可能会因为feed forward中的计算导致时间长。这里我们只针对第一种情况下进行优化。 第一种情况&#xff1a;有些问题&#xff0c;我们可能不需要看整个句子…