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 个元素后面的数据就是原来的数据, 不影响输出的正确性

你可能感兴趣的:(LeetCode合集,leetcode,算法,职场和发展)