欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 03-移除元素

03-移除元素

2025/2/8 6:17:05 来源:https://blog.csdn.net/hqy1989/article/details/145504012  浏览:    关键词:03-移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k

方法一 

function removeElement(nums: number[], val: number): number {let k = 0; // 用于记录不等于 val 的元素数量for (let i = 0; i < nums.length; i++) {if (nums[i]!== val) {// 如果当前元素不等于 val,则将其放到数组的前 k 个位置nums[k] = nums[i];k++;}}return k;
}// 示例调用
const nums = [3, 2, 2, 3];
const val = 3;
const result = removeElement(nums, val);
console.log("剩余元素数量:", result);
console.log("修改后的数组:", nums.slice(0, result));

代码解释

  1. 初始化计数器

    • let k = 0;:用于记录数组中不等于 val 的元素数量。
  2. 遍历数组

    • 使用 for 循环遍历数组 nums
    • 对于每个元素 nums[i],检查其是否不等于 val
    • 如果 nums[i] 不等于 val,将其赋值给 nums[k],并将 k 加 1。这意味着将不等于 val 的元素依次放到数组的前 k 个位置。
  3. 返回结果

    • 遍历结束后,k 即为数组中不等于 val 的元素数量,将其返回。

复杂度分析

  • 时间复杂度:,其中  是数组 nums 的长度。因为只需要遍历数组一次。
  • 空间复杂度:,只使用了常数级的额外空间。

注意事项

  • 函数返回的是不等于 val 的元素数量 k,而修改后的数组 nums 的前 k 个元素包含了所有不等于 val 的元素。
  • 数组 nums 的其余元素和数组的大小并不重要,因此可以忽略。

方法二 

function removeElement(nums: number[], val: number): number {for (let i = 0; i < nums.length; i++) {if (nums[i] === val) {// 使用 splice 方法移除当前等于 val 的元素nums.splice(i, 1);// 由于移除元素后数组长度减 1,后续元素会前移,所以需要将索引 i 减 1i--; }}return nums.length;
}// 示例调用
const nums = [3, 2, 2, 3];
const val = 3;
const result = removeElement(nums, val);
console.log("移除元素后的数组:", nums);
console.log("剩余元素的数量:", result);

代码解释

  1. 遍历数组:使用 for 循环遍历数组 nums 中的每个元素。
  2. 检查元素是否等于 val:对于每个元素 nums[i],检查它是否等于 val
  3. 移除元素:如果 nums[i] 等于 val,则使用 splice 方法将该元素从数组中移除。splice 方法的第一个参数是要移除元素的起始索引,第二个参数是要移除的元素个数。
  4. 调整索引:由于使用 splice 方法移除元素后,数组的长度会减 1,后续元素会向前移动填补空缺,所以需要将当前索引 i 减 1,以确保不会跳过下一个元素。
  5. 返回剩余元素的数量:遍历结束后,返回数组 nums 的长度,即剩余元素的数量。

复杂度分析

  • 时间复杂度:,因为在最坏情况下,每次调用 splice 方法都需要将后面的元素向前移动,导致时间复杂度较高。
  • 空间复杂度:,只使用了常数级的额外空间。

需要注意的是,虽然 splice 方法可以实现移除元素的功能,但由于其时间复杂度较高,在处理大规模数组时可能性能不佳。相比之下,使用双指针法(如前面提到的方法)的时间复杂度为 ,性能更好。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com