当前位置:   article > 正文

leetCode第27题——移除元素_给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返

一、题目

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:
输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。 例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:
输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

二、思路及图解

1、思路

  • 使用双指针完成此题解,
  • 题目要求删除数组中等于 val的元素,因此输出数组的长度一定小于等于输入数组的长度,我们可以把输出的数组直接写在输入数组上。
  • 可以使用双指针:右指针right 指向当前将要处理的元素,左指针left 指向下一个将要赋值的位置。
  • 如果右指针指向的元素不等于 val,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移;
  • 如果右指针指向的元素等于 val,它不能在输出数组里,此时左指针不动,右指针右移一位。

2、图解

  • 初始化时,右指针right和左指针left 都指向数组下标为0的位置,右指针right 表示前将要处理的元素,左指针left 表示下一个将要赋值的位置。如下图:
    在这里插入图片描述
  • 第一次遍历:右指针指向的元素等于 val,它不能在输出数组里,此时左指针不动,右指针右移一位。如下图:
    在这里插入图片描述
  • 第二次遍历:右指针指向的元素不等于 val,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移;如下图:

在这里插入图片描述

  • 第三次遍历:右指针指向的元素等于 val,它不能在输出数组里,此时左指针不动,右指针右移一位。如下图:
    在这里插入图片描述
  • 最后输出左指针left即是移除后数组的新长度。

三、题目代码解析

1、代码

public class Test1 {
    public static void main(String[] args) {
        int[] nums={3,2,2,3};
        int removeNum= removeElement(nums,3);
        System.out.println(removeNum);
    }

    /**
     * 双指针方式
     */
    public static int removeElement(int[] nums, int val) {
        int n = nums.length;//数组长度
        int left = 0;//左指针left 指向下一个将要赋值的位置。
        //右指针right 指向当前将要处理的元素,
        for (int right = 0; right < n; right++) {
            if (nums[right] != val) {//右指针指向的元素不等于 val,它一定是输出数组的一个元素
                nums[left] = nums[right];//将右指针指向的元素复制到左指针位置
                left++;//然后将左右指针同时右移
            }
            //右指针指向的元素等于 val,它不能在输出数组里,此时左指针不动,右指针右移一位。
        }
        return left;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

2、结果如下图:

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/611475
推荐阅读
相关标签
  

闽ICP备14008679号