当前位置: 首页 > ops >正文

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

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

第一种思路
标签:拷贝覆盖
主要思路是遍历数组 nums,每次取出的数字变量为 num,同时设置一个下标 ans
在遍历过程中如果出现数字与需要移除的值不相同时,则进行拷贝覆盖 nums[ans] = num,ans 自增 1
如果相同的时候,则跳过该数字不进行拷贝覆盖,最后 ans 即为新的数组长度
这种思路在移除元素较多时更适合使用,最极端的情况是全部元素都需要移除,遍历一遍结束即可
时间复杂度:O(n),空间复杂度:O(1)

第一种代码:


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)

第二种代码:


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;
};
http://www.xdnf.cn/news/12516.html

相关文章:

  • 基于Java Swing的办公自动化系统设计与实现:附完整源码与论文
  • Deepseek基座:Deepseek-v2核心内容解析
  • 【C/C++】STL实现版本为什么比手写版本高?
  • Spring Cloud 多机部署与负载均衡实战详解
  • 向 AI Search 迈进,腾讯云 ES 自研 v-pack 向量增强插件揭秘
  • 通俗解释Linux 动态库-fPIC的作用
  • Dynamics 365 Finance + Power Automate 自动化凭证审核
  • 通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
  • Python 自定义函数详解及递归函数等案例
  • 协议哨兵:场景化协议风险的ai工具
  • Tableau for mac 驱动
  • 《探秘局域网广播:网络世界的 “大喇叭”》
  • 前端 Electron 桌面应用学习笔记
  • electron-vite串口通信
  • 队列的概念及实现
  • LeetCode 高频 SQL 50 题(基础版)之 【子查询】· 上
  • (LeetCode 每日一题)3170. 删除星号以后字典序最小的字符串(贪心+栈)
  • Vue3学习(4)- computed的使用
  • 【学习笔记】深度学习-参数初始化
  • Android 蓝牙通信
  • 从0开始学习R语言--Day19--连续变量的相关性检验
  • c++ 单例模式
  • Android和硬件通信
  • 二.单例模式‌
  • Shell: 解决文件复制后权限变化问题
  • 两阶段提交
  • 7.2.1_顺序查找
  • Linux 初始化与服务管理全解析:rc.d、systemctl与service对比
  • 我用AI降低AI率:一次“用魔法打败魔法”的实验
  • 深入理解 Python `asyncio` 的子进程协议(Subprocess Protocol)