博客
关于我
27.移除元素
阅读量:646 次
发布时间:2019-03-15

本文共 799 字,大约阅读时间需要 2 分钟。

为了解决这个问题,我们需要在原地移除数组中所有等于给定值的元素,并返回移除后数组的新长度。我们不能使用额外的数组空间,因此必须在原数组上进行操作。

方法思路

我们可以使用双指针法来解决这个问题。快指针遍历数组,遇到不等于目标值的元素时,将其复制到慢指针当前的位置,并前进慢指针。这种方法确保我们在原地修改数组,同时不使用额外的空间,时间复杂度为 O(n),空间复杂度为 O(1)。

解决代码

public class Test {    public int removeElement(int[] nums, int val) {        int i = 0;        for (int j = 0; j < nums.length; j++) {            if (nums[j] != val) {                nums[i] = nums[j];                i++;            }        }        return i;    }    public static void main(String[] args) {        int[] nums = {0,1,2,2,3,0,4,2};        System.out.println(new Test().removeElement(nums, 2));    }}

代码解释

  • 初始化指针:慢指针 i 初始化为 0,用于记录新数组的起始位置。
  • 遍历数组:快指针 j 从 0 开始遍历数组。
  • 检查元素:如果当前元素 nums[j] 不等于目标值 val,则将其复制到 nums[i],然后前进慢指针 i
  • 返回结果:遍历结束后,慢指针 i 的值即为新数组的长度。
  • 这种方法确保我们在原地修改数组,符合题目要求,同时保证了时间和空间上的效率。

    转载地址:http://fxelz.baihongyu.com/

    你可能感兴趣的文章
    Netty工作笔记0061---Netty心跳处理器编写
    查看>>
    Netty工作笔记0063---WebSocket长连接开发2
    查看>>
    Netty工作笔记0065---WebSocket长连接开发4
    查看>>
    Netty工作笔记0066---Netty核心模块内容梳理
    查看>>
    Netty工作笔记0068---Protobuf机制简述
    查看>>
    Netty工作笔记0070---Protobuf使用案例Codec使用
    查看>>
    Netty工作笔记0071---Protobuf传输多种类型
    查看>>
    Netty工作笔记0072---Protobuf内容小结
    查看>>
    Netty工作笔记0073---Neety的出站和入站机制
    查看>>
    Netty工作笔记0074---handler链调用机制实例1
    查看>>
    Netty工作笔记0075---handler链调用机制实例1
    查看>>
    Netty工作笔记0076---handler链调用机制实例3
    查看>>
    Netty工作笔记0077---handler链调用机制实例4
    查看>>
    Netty工作笔记0078---Netty其他常用编解码器
    查看>>
    Netty工作笔记0079---Log4j整合到Netty
    查看>>
    Netty工作笔记0080---编解码器和处理器链梳理
    查看>>
    Netty工作笔记0081---编解码器和处理器链梳理
    查看>>
    Netty工作笔记0082---TCP粘包拆包实例演示
    查看>>
    Netty工作笔记0083---通过自定义协议解决粘包拆包问题1
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>