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)

相关推荐
AIpanda88811 小时前
数字员工助推AI销冠系统和AI提效软件系统,实现企业智能化转型与运营效率提升
算法
青山师11 小时前
Java反射深度解析:运行时探查的艺术、代价与工程实践
java·开发语言·面试·反射·java程序员·java核心
MonkeyKing715511 小时前
iOS 开发 Block 底层结构、循环引用及解决方案
ios·面试
2401_8971905511 小时前
【C++高阶系列】告别内查找局限:基于磁盘 I/O 视角的 B 树深度剖析与 C++ 泛型实现!
java·c++·算法
冻感糕人~11 小时前
大模型面试干货:小白程序员如何准备,轻松拿下高薪Offer?收藏这份独家秘籍!
java·人工智能·学习·ai·面试·职场和发展·大模型学习
多加点辣也没关系11 小时前
数据结构与算法|第十一章:跳表
数据结构·算法
风筝在晴天搁浅12 小时前
字节/蚂蚁/美团/拼多多 LeetCode 165.比较版本号
java·leetcode
晚风叙码12 小时前
归并排序:从原理到非递归实现,一文搞定
数据结构·算法
悲伤小伞12 小时前
LeetCode 热题 100_3-128. 最长连续序列
c++·算法·leetcode·哈希算法
多加点辣也没关系12 小时前
数据结构与算法|第十三章:递归与分治
数据结构·算法