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

[ LeetCode 75 ] 283 移动零(JavaScript)

283 移动零

      • 题目描述
      • 解题思路
      • 步骤解析
      • 时间和空间复杂度
      • 代码实现

题目描述

LeetCode 283 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

解题思路

目标是将数组中的所有 0 移动到数组的末尾,同时保持非零元素的相对顺序不变。
选择使用合适的策略(双指针法):使用两个指针来遍历数组,一个指针用于遍历整个数组,另一个指针用于记录非零元素应该放置的位置。

步骤解析

  1. 初始化一个变量
    a. 变量 lastNonZeroIndex ,来跟踪最后一个非0元素的位置

  2. 遍历数组,
    a. 使用一个循环遍历数组中的每个元素。
    b. 当遇到非0元素时,将其赋值给 nums[lastNonZeroIndex] ,并将 lastNonZeroIndex 向前移动1位

  3. 填充 0
    a. 在结束遍历后,使用另一个循环,从 lastNonZeroIndex 的位置到数组末尾填充0。

时间和空间复杂度

  • 时间复杂度:O(n),因为数组只被遍历了一次。
  • 空间复杂度:O(1),只使用了常数级别的额外空间。

代码实现

/*** @param {number[]} nums* @return {void} Do not return anything, modify nums in-place instead.*/
function moveZeroes(nums) {// 1. 初始化一个变量 lastNonZeroIndex ,来跟踪最后一个非零元素的位置let lastNonZeroIndex = 0;// 2. 遍历数组,使用一个循环遍历数组中的每个元素。// 当遇到非零元素时,将其赋值给 nums[lastNonZeroIndex] ,并将 lastNonZeroIndex 向前移动一位for (let i = 0; i < nums.length; i++) {if (nums[i] !== 0) {nums[lastNonZeroIndex] = nums[i];lastNonZeroIndex++;}}// 3. 填充 0// 在结束遍历后,使用另一个循环,从 lastNonZeroIndex 的位置到数组末尾填充零。for (let i = lastNonZeroIndex; i < nums.length; i++) {nums[i] = 0;}return nums;
}// 示例用法
const nums = [0, 1, 0, 3, 12];
moveZeroes(nums);
console.log(nums);  // 输出: [1, 3, 12, 0, 0]
http://www.lryc.cn/news/518705.html

相关文章:

  • 前端学习汇总
  • 蓝笔科技 | 超凡妈妈赋能计划-【北大生涯规划师特别企划】
  • 【电路笔记 TMS320C6***DSP】C6748 EDMA3配置笔记 寄存器配置+影子通道寄存器+配置示例
  • 2025新春烟花代码(二)HTML5实现孔明灯和烟花效果
  • apollo内置eureka dashboard授权登录
  • 后台管理系统全屏功能实现
  • 风电叶片市场竞争激烈:开启绿色能源新篇章的巨大潜力
  • 【Unity3D日常开发】Unity3D中适用WEBGL打开Window文件对话框打开/上传文件
  • C# 或 .NetCore 如何使用 NPOI 导出图片到 Excel 文件
  • Lambda expressions in C++ (C++ 中的 lambda 表达式)
  • 【Rust自学】11.4. 用should_panic检查恐慌
  • 高斯函数Gaussian绘制matlab
  • 获取客户端真实IP地址
  • Kotlin学习(一)
  • 鸿蒙UI开发——日历选择器
  • 2025-1-9 QT 使用 QXlsx库 读取 .xlsx 文件 —— 导入 QXlsx库以及读取 .xlsx 的源码 实践出真知,你我共勉
  • React中createRoot函数原理解读——Element对象与Fiber对象、FiberRootNode与HostRootNode
  • 利用Python实现Union-Find算法
  • 【LeetCode: 912. 排序数组 + 归并排序】
  • AI时代来了,我们不再需要IDE了
  • PL/SQL语言的网络编程
  • vue video重复视频 设置 srcObject 视频流不占用资源 减少资源浪费
  • JavaFx 21 项目Markdown 预览、编辑、新建、文件树、删除、重命名
  • git项目提交步骤(简洁版)
  • 风水算命系统架构与功能分析
  • Clojure语言的学习路线
  • 网络安全核心目标CIA
  • Wi-Fi Direct (P2P)原理及功能介绍
  • Perl语言的数据结构
  • 【MFC】设置CTreeCtrl单个节点的文字颜色