• leetcode第27题:移除指定元素


    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。

    不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

    元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

    思路如下:

    既然问题要求我们就地删除给定值的所有元素,我们就必须用 O(1)O(1) 的额外空间来处理它。如何解决?我们可以保留两个指针 ii 和 jj,其中 ii是慢指针,jj 是快指针。

    当 nums[j]nums[j] 与给定的值相等时,递增 jj 以跳过该元素。只要 nums[j] eq valnums[j]̸=val,我们就复制 nums[j]nums[j] 到 nums[i]nums[i] 并同时递增两个索引。重复这一过程,直到 jj 到达数组的末尾,该数组的新长度为 ii。

    代码如下:

    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;
    }
  • 相关阅读:
    vue 侦听器
    vue 计算属性
    typeof 运算符
    constructor 属性
    立即执行函数与闭包
    计算属性缓存 vs 方法
    JavaScrip备课
    winform 实现对usb热拔插的监听
    c# async await的使用方式及为啥要用它
    .net5与之前的版本GetBytes长度变化
  • 原文地址:https://www.cnblogs.com/tsdblogs/p/10105290.html
Copyright © 2020-2023  润新知