LeetCode移除元素

题目描述

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

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

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

解题思路

通过遍历数组,将不等于 val 的元素复制到数组的前面来实现原地修改数组。最后返回的 ans 变量就是不等于 val 的元素的数量。

代码

/**
 * @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;
}; 

代码分析

  1. 初始化一个变量 ans 用来计数不等于 val 的元素。
  2. 遍历数组 nums 中的每个元素 num
  3. 如果当前元素 num 不等于 val,则将其复制到 nums 数组的 ans 索引处,并将 ans 增加 1。
  4. 遍历完成后,ans 就是数组中不等于 val 的元素的数量。
  5. 返回 ans

这个函数的时间复杂度是 O(n),其中 n 是数组 nums 的长度,因为它需要遍历整个数组一次。空间复杂度是 O(1)

nums 的其余元素和 nums 的大小并不重要,所以k 个元素后面的数据就是原来的数据, 不影响输出的正确性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值