LeetCode 面试经典150题 27.移除元素

题目

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

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地修改输入数组

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

思路双指针。前半段是有效部分,存储的是不等于val的元素;后半段是无效部分,存储的是等于val的元素。最终答案返回有效部分的结尾下标。

代码

java 复制代码
class Solution {
    public int removeElement(int[] nums, int val) {
        int j = nums.length - 1; // j指向不等于val的最靠后的位置
        for (int i = 0; i <= j; i++) {
            if (nums[i] == val) {
                nums[i] = nums[j];
                nums[j] = val;
                j--;
                i--;
            }
        }
        return j + 1;
    }
}

性能:时间复杂度 O(n) 空间复杂度 O(1)

相关推荐
颜酱9 小时前
图的数据结构:从「多叉树」到存储与遍历
javascript·后端·算法
哈里谢顿10 小时前
0305乒乓xx agent运维开发岗面试记录
面试
哈里谢顿10 小时前
0309面试二总结
面试
哈里谢顿10 小时前
0309面试一记录
面试
哈里谢顿10 小时前
0310面试二记录
面试
哈里谢顿11 小时前
0310面试记录一
面试
boooooooom13 小时前
讲清 Proxy + effect + track/trigger 流程
javascript·vue.js·面试
豆苗学前端14 小时前
彻底讲透浏览器缓存机制,吊打面试官
前端·javascript·面试
zone773914 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
swipe14 小时前
箭头函数与 this 面试题深度解析:从原理到实战
前端·javascript·面试