首页 > 编程语言 >[leetcode]27. 移除元素(Java实现)

[leetcode]27. 移除元素(Java实现)

时间:2024-11-16 16:17:37浏览次数:3  
标签:27 Java val nums 题解 元素 数组 移除 指针

题目

给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

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

解法1:

这个题好像简单一些,很快就能想出来。

我的逻辑是,双指针找到val和数组末尾不是val的数字对换,这样所有的val最后都会留在数组末端。指针i从前往后遍历,指针j从后往前,j以后的数字保证全是val,所以循环内条件写i<j就好啦。

时间复杂度O(n),空间复杂度O(1)。

解法2:

这个是看题解看到的,我觉得他的思路挺简单的,找到不是val的数字就拷贝到数组前面去,因为题目中有说无所谓数组后面是什么。

不过不知道为什么,他这种方式消耗的内存反而比我的稍微大一些,是反复拷贝的原因吗?我有点不明白。

总结

我今天到这儿才做完小红书学长规定的第一天刷题内容。。拖拉死了。做数组题就是要想着:绝对不要用双层循环啊啊啊。而且有时候感觉自己会想的比较复杂,看题解的一些简单清奇思路会豁然开朗。

标签:27,Java,val,nums,题解,元素,数组,移除,指针
From: https://blog.csdn.net/m0_73184257/article/details/143818929

相关文章

  • [leetcode]485. 最大连续1的个数(Java实现)
    题目给定一个二进制数组 nums ,计算其中最大连续 1 的个数。示例1:输入:nums=[1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续1,所以最大连续1的个数是3.示例2:输入:nums=[1,0,1,1,0,1]输出:2解法1嗯,速度有进步我感觉我想出这个思路还是挺快的,两......
  • [leetcode]283. 移动零(Java实现)
    题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例1:输入:nums=[0,1,0,3,12]输出:[1,3,12,0,0]示例2:输入:nums=[0]输出:[0]第一种解法(帮助我这种小白......
  • java操作pdf文本域填充内容
    引入jar包<dependencies><dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.2.5</version><type>pom&......
  • Java基础——网络编程
    可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。1.基本的通信架构基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)无论CS架构,还是BS架构的软件都必须依赖网络编程2.网络通信的三要素2.1.IP全称互......
  • Java基础——多线程
    1.线程是一个程序内部的一条执行流程程序中如果只有一条执行流程,那这个程序就是单线程的程序2.多线程指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)2.1.如何创建多条线程Java通过java.lang.Thread类的对象来代表线程2.1.1.方式一:继承Thread类//1......
  • 计算机毕业设计—12795 Ssm网上考试系统(源码免费领)
    摘 要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用SSM框架开发基......
  • Java-面向对象(下)
    下面让我们继续学习面向对象类的继承在现有类的基础上去构建一个新的类。现有类叫做基类(baseclass)、超类(superclass)新的类叫做派生类(derivedclass)、子类(孩子类)(childclass)如果一个类想要继承另外一个类,需要用到extends关键字。class基类{}class子类extends......
  • #Java-面向对象进阶-1
    1.static静态属性static是Java中的一个修饰符,可用来修饰成员变量、成员方法a.静态变量被static修饰的成员变量称为静态变量静态变量被该类的所有成员共享调用方式:类名调用(推荐)对象名调用例:创建方法//在创建的类中:publicstaticStringname;调用:假设类为:Stud......
  • #Java-面向对象进阶-多态
    1.多态多态是面向对象三大特征之一,表示同类型的对象表现不同的形态表现形式:父类类型对象名称=子类对象;多态的前提:有继承关系有父类引用子类Fuf=newZi();有方法重写使用场景举例:当需要写一个注册的方法,但是这个方法要能实现不同对象的注册例如:老......
  • Java序列化与反序列化深度解析
    一、引言在Java开发中,序列化与反序列化是非常重要的概念和技术手段。它允许我们将对象转换为字节流以便于存储或传输,然后在需要的时候再将字节流还原为对象。这一机制在很多场景中都有着广泛的应用,例如数据持久化、分布式系统中的远程方法调用(RMI)、缓存等。本文将深入探讨......