移除元素-JavaScript【算法学习day.04】

题目链接:27. 移除元素 - 力扣(LeetCode)

第一种思路

标签:拷贝覆盖

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

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

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

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

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

第一种代码:

javascript 复制代码
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 ,继续下一次遍历

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

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

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

第二种代码:

javascript 复制代码
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;
};
相关推荐
不会代码的小猴9 小时前
标准模板库(STL)
开发语言·c++·笔记·算法
ZhouDevin9 小时前
算法论文/高效微调4——DoRA:权重分解的低秩适配方法
算法
大模型码小白9 小时前
【AI】一文讲清 RAG:从大模型局限到企业级知识库落地流程
人工智能·深度学习·学习
AI探索先锋9 小时前
A* 路径规划:四种算法的进化史-学习
学习·算法
旖旎夜光9 小时前
LeetCode 202:快乐数(双指针问题) —— 题解
数据结构·c++·算法·leetcode·双指针
辣知10 小时前
辣知·化智20 九千年文明记录
学习
GlueNa2SiO310 小时前
06-Docker存储与数据持久化
笔记·学习·docker
铅笔侠_小龙虾10 小时前
rust 学习(9):结构体
开发语言·学习·rust
cpp_250110 小时前
P1113 [USACO02FEB] 杂务
数据结构·c++·算法·动态规划·图论·拓扑排序·洛谷题解
月光船幽幽11 小时前
门控函数SHS阈值与调制机制解析
人工智能·python·算法