千家信息网

leetcode中如何解决移除元素问题

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关leetcode中如何解决移除元素问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。题目链接https://leetcode-cn.com/pro
千家信息网最后更新 2026年11月03日leetcode中如何解决移除元素问题

这篇文章给大家分享的是有关leetcode中如何解决移除元素问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

题目链接

https://leetcode-cn.com/problems/remove-element/

题目描述

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

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

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

示例 1:

给定 nums = [3,2,2,3], val = 3,

函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。

你不需要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,1,2,2,3,0,4,2], val = 2,

函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。

注意这五个元素可为任意顺序。

你不需要考虑数组中超出新长度后面的元素。

解题方案

第一种思路

  • 标签:拷贝覆盖

  • 主要思路是遍历数组nums,每次取出的数字变量为num,同时设置一个下标ans

  • 在遍历过程中如果出现数字与需要移除的值不相同时,则进行拷贝覆盖nums[ans] = num,ans自增1

  • 如果相同的时候,则跳过该数字不进行拷贝覆盖,最后ans即为新的数组长度

  • 这种思路在移除元素较多时更适合使用,最极端的情况是全部元素都需要移除,遍历一遍结束即可

  • 时间复杂度:O(n),空间复杂度:O(1)

第一种代码

  • Java版本

class Solution {
public int removeElement(int[] nums, int val) {
int ans = 0;
for(int num: nums) {
if(num != val) {
nums[ans] = num;
ans++;
}
}
return ans;
}
}
  • JavaScript版本

/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function(nums, val) {
let ans = 0;
for(const num of nums) {
if(num != val) {
nums[ans] = num;
ans++;
}
}
return ans;
};

第二种思路

  • 标签:交换移除

  • 主要思路是遍历数组nums,遍历指针为i,总长度为ans

  • 在遍历过程中如果出现数字与需要移除的值不相同时,则i自增1,继续下一次遍历

  • 如果相同的时候,则将nums[i]与nums[ans-1]交换,即当前数字和数组最后一个数字进行交换,交换后就少了一个元素,故而ans自减1

  • 这种思路在移除元素较少时更适合使用,最极端的情况是没有元素需要移除,遍历一遍结束即可

  • 时间复杂度:O(n),空间复杂度:O(1)

第二种代码

  • Java版本

class Solution {
public int removeElement(int[] nums, int val) {
int ans = nums.length;
for (int i = 0; i < ans;) {
if (nums[i] == val) {
nums[i] = nums[ans - 1];
ans--;
} else {
i++;
}
}
return ans;
}
}
  • JavaScript版本

/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function(nums, val) {
let ans = nums.length;
for (let i = 0; i < ans;) {
if (nums[i] == val) {
nums[i] = nums[ans - 1];
ans--;
} else {
i++;
}
}
return ans;
};

画解


感谢各位的阅读!关于"leetcode中如何解决移除元素问题"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

元素 数组 长度 思路 数字 复杂 相同 复杂度 版本 空间 拷贝 中超 问题 代码 内容 函数 原地 情况 时候 时间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技名片 互联网新科技 嘟嘟瓜互联网科技 世界互联网领先科技成果 润盈互联网科技 科技大学互联网专业好不好 广西拼得多互联网科技有限公司 玉溪互联网科技怎么选 996高科技互联网公司 天津腾达互联网科技有限公司 燊美集互联网科技有限公司 乌鲁木齐新华智原互联网科技学校 互联网科技创新的路径 福州德业互联网科技 世界互联网科技成果奖 长沙渺峰互联网科技有限公司 米泉互联网科技专业怎么样 互联网金融金融科技 银川新华互联网科技学校招聘 科技发展第三阶段互联网时代 互联网科技企业 广州万易互联网科技有限公司 北京路客互联网科技有限公司 互联网最新的科技有限公司 互联网科技未来 奇酷互联网络科技公司 哈尔滨秒房互联网科技有限公司 南山科技园互联网公司有哪些 移动互联网年度科技创新 中科明德北京互联网科技
0