力扣27.移除元素(Java)

news2024/11/27 3:57:56

思路:

使用双指针,其中一个指针用来寻找不同val的下标,另一个指针用来赋值

class Solution {
    public int removeElement(int[] nums, int val) {
        int left=0;//用来赋值的指针
        for(int right=0;right<nums.length;right++){//用来寻找不同与val的下标的指针
            if(nums[right]!=val){//如果找到不同与val
                nums[left]=nums[right];//赋值
                left++;//赋值的下标++
            }
        }
        return left;//同时也是不同val的总数
    }
}

虽然很简单,但是还能再优化,按照上面的代码,会重复赋值需要保留的数据,例如最坏的情况,没有等于val的数,数组:[1,2,3,4,5,6,7],val=8,那么就会将该数组重复赋值,但是一个没有必要移除,这时就该换个思路,即从如果有不同与val的就赋值,改为如果有与val相同的就赋值,这样子就保证了只要我们进行了操作,就一定是在移除相同元素

因为我们知道移除后的数组的长度一定小于等于原数组,所以我们可以用前后两个指针,当出现相同val时直接从最后的一个元素往前赋值,因为我们不知道这个元素是否相同与val,所以我们暂时不动前面这个指针,继续判断,同时让这个后面的指针往前移动一位,直到前指针和后指针相遇则说明完成了移除

class Solution {
    public int removeElement(int[] nums, int val) {
        int left = 0;//前指针
        int right = nums.length;//后指针
        while (left < right) {//当它们没有相遇时
            if (nums[left] == val) {//如果出现相同val的
                nums[left] = nums[right - 1];//后指针赋值给前指针
                right--;//后指针往前移动一位,但是前指针不动,因为无法判断这个后指针赋的值是否等于val
            } else {//如果不相同
                left++;//前指针往后移动
            }
        }
        return left;
    }
}

这样子就保证了只要我们进行操作,就一定是在做有用功,对之前可能做有用功,也有可能做无用功进行了优化

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

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

相关文章

[Linux]Linux编译器gcc/g++

首先我们需要明确概念gcc只能用来编译c语言&#xff0c;g即可用来编译c语言&#xff0c;又可用来编译c,但我们一般用gcc编译c,g编译c 一、gcc的使用 当我们写好代码以后可以直接 gcc test.c然后它会自动生成一个可执行程序a.out这个可执行程序的名字不重要&#xff0c;关键是…

醇香之旅:探索红酒的无穷魅力

在浩渺的饮品世界里&#xff0c;红酒如同一颗璀璨的星辰&#xff0c;闪烁着诱人的光芒。它以其不同的醇香和深邃的韵味&#xff0c;吸引着无数人的目光。今天&#xff0c;就让我们一起踏上这场醇香之旅&#xff0c;探索雷盛红酒所带来的无穷魅力。 一、初识红酒的醇香 当我们…

vue3前端页面下载excel模版

1.excel上传到public目录下 2.代码中引用excel路径 <el-space direction"horizontal" size"small"><el-button click"handleChangePage">刷新列表</el-button><el-button type"primary" click"handleBatch…

【第2章】Spring Cloud之Nacos服务端安装

文章目录 前言一、预备环境准备二、下载源码或者安装包1. 从 Github 上下载源码方式2.下载编译后压缩包方式(推荐)3. 目录结构4. 启动服务器5. 访问控制台6. 关闭服务器 总结 前言 Nacos 通过提供简单易用的动态服务发现、服务配置、服务共享与管理等服务基础设施&#xff0c;…

[日进斗金系列]用码上飞解决企微开发维修管理系统的需求

前言&#xff1a; 今天跟大家唠唠如何用小money生 大money的方法&#xff0c;首先我们需要准备一个工具。 这个工具叫码上飞CodeFlying&#xff0c;它是目前国内首发的L4级自动化智能软件开发平台。 它可以在短时间内&#xff0c;与AI进行几轮对话就能开发出一个可以解决实际…

【React打卡学习第一天】

React入门 一、简介二、基本使用1.引入相关js库2.babel.js的作用 二、创建虚拟DOM三、JSX&#xff08;JavaScript XML&#xff09;1.本质2.作用3.基本语法规则定义虚拟DOM时&#xff0c;不要写引号。标签中混入JS表达式时要用{}。样式的类名指定不要用class,要用className.内联…

发现一个巨牛的国产GPT,确定不来体验一下?

ChatGAI 这个网站融合了多种实用功能&#xff0c;包括聊天问答、PPT生成、笔记整理、图文创作和视频生成等&#xff0c;能满足媒体从业者的多元需求。用户无需注册即可体验&#xff0c;界面友好&#xff0c;操作便捷&#xff0c;分享给兄弟们使用。 链接&#xff1a;ChatGAI …

昇思25天学习打卡营第13天|munger85

文本解码原理–以MindNLP为例 重要的就是怎么样把数字最后转化成真正的文字。而且自回归模型它会一个字给一个字的预测&#xff0c;下一个字应该是什么&#xff1f; 如果这个模型下载很慢&#xff0c;你就可以通过这种方式从摩大社区进行下载。 这种方式&#xff0c; 每一次候…

LeetCode 142.环形链表2 C写法

LeetCOde 142.环形链表2 C写法 思路1&#x1f914;&#xff1a; ​ 用环形链表的方法&#xff0c;快慢指针找到slow和fast的相遇点&#xff0c;此时头到入口点的位置与相遇点到入口点的距离一样。 ​ 我们假设头到入口点的长度为L&#xff0c;环的长度为C&#xff0c;相遇点到入…

ArgMed-Agents:通过多个智能体论证方案增强大模型,进行可解释的临床决策推理

ArgMed-Agents&#xff1a;通过多个智能体论证方案增强大模型&#xff0c;进行可解释的临床决策推理 提出背景ArgMed-Agents 框架目的解法拆解逻辑链 临床讨论的论证方案&#xff08;ASCD&#xff09;论证方案用于决策&#xff08;ASDM&#xff09;论证方案用于副作用&#xff…

算法力扣刷题记录 四十八【513.找树左下角的值】

前言 二叉树篇继续。 记录 四十八【513.找树左下角的值】 一、题目阅读 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,nul…

【Datawhale AI夏令营】电力需求预测挑战赛 后续研究方向

时间序列预测是一个不断发展的领域&#xff0c;随着技术的进步&#xff0c;我们可以期待更多的优化方法和模型的出现。 深度学习模型&#xff0c;特别是LSTM和其变体、transformer模型和其变体、大模型&#xff0c;已经在许多时间序列预测任务中显示出了优越的性能。 优化方向…

Linux的相关命令

Linux 1. 什么是Linux系统 Linux&#xff0c;全称GNU/Linux&#xff0c;是一种免费使用和自由传播的类UNIX操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦兹&#xff08;Linus Benedict Torvalds&#xff09;于1991年10月5日首次发布&#xff0c;它主要受到Minix和Unix思想…

面对人工智能发展的伦理挑战:应对策略与未来方向

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

基于单片机的智能医疗监护系统设计

1.简介 随着社会的发展&#xff0c;智能化电子设备成为了人们生活中不可或缺的一部分&#xff0c;尤其是在人们对于身心健康更加注重的今天&#xff0c;智能医疗监护系统应运而生。本套电子监护设备集体温测量、心电采集、心率监测、血氧监测于一体&#xff0c;带有语音播报模块…

关于java装饰器模式在ai生成举例不可用的问题

定义 首先描述下定义&#xff0c;然后举例说明。 网上定义 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许向对象添加新的功能或职责&#xff0c;同时保持对象类的原始结构。这种模式提供了一种替代继承的机制来扩展功能&…

redis原理之底层数据结构(二)-压缩列表

1.绪论 压缩列表是redis最底层的结构之一&#xff0c;比如redis中的hash&#xff0c;list在某些场景下使用的都是压缩列表。接下来就让我们看看压缩列表结构究竟是怎样的。 2.ziplist 2.1 ziplist的组成 在低版本中压缩列表是由ziplist实现的&#xff0c;我们来看看他的结构…

【教学类-67-01】20240715毛毛虫AB排序

背景需求 幼儿园数学区 颜色排序 - 小红书毛毛虫颜色排序 直接打印#幼儿园数学https://www.xiaohongshu.com/explore/63362546000000001d026455?app_platformandroid&ignoreEngagetrue&app_version8.44.1&share_from_user_hiddentrue&xsec_sourceapp_share&a…

Jenkins用户权限管理指定操作任务

安装插件 在 Jenkins 的管理插件中进行插件安装。 搜索插件库&#xff1a;Role-based Authorization Strategy 修改授权策略 在全局安全配置中&#xff0c;把授权策略改为Role-Based Strategy 添加角色规则 在安全中选择Manage and Assign Roles 在Global roles中添加一个…

嵌入式人工智能(2-树莓派4B开发板硬件环境搭建)

1.硬件开发环境&#xff08;T型板&#xff09; 树莓派4B开发板需要搭配面包板&#xff0c;T型板将40个GPIO口引出&#xff0c;再将T型板插到面包板上面。这个地方需要注意插接的方向&#xff0c;由于插树莓派引脚的排线没有防呆设计&#xff0c;因此&#xff0c;请注意方向&am…