LeetCode移动零使用JavaScript解题|前端学算法

简介: LeetCode移动零使用JavaScript解题|前端学算法

移动零


给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1

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

输出: [1,3,12,0,0]

示例 2

输入: nums = [0]

输出: [0]


解题思路


此时可以使用两个指针,其中一个指向当前已经处理好的序列的尾部(left左指针),另一个指针指向待处理序列的头部(right右指针)。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。


注意到以下性质:

左指针左边均为非零数;

右指针左边直到左指针处均为零。


因此每次交换,都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变。


通过上面的思路,我们可以进一步拆解

  • 第一步:定义两个指针 left, right。 left指针始终要指向第一个0所在的位置
  • 第二步:right则负责去取到数组中的每一个数判断其是否为0,若为0则right++
  • 第三步:若不为0则令nums[left]nums[right]交换位置,并使 left++(left指针始终要指向第一个0所在的位置),最后再right++,直至right指针找到最后一个数组元素为止
var moveZeroes = function(nums) {
  let left = 0
  let right = 0
  let len = nums.length
  while (right < len) {
    if (nums[right] !== 0) {
       //交换位置
        let temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
        left++
    }
    right++
  }
  return nums
}


微信图片_20230107193055.png




目录
相关文章
|
1月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
38 0
|
2天前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
22天前
|
人工智能 自然语言处理 程序员
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
欢迎来到工程师令狐小哥的频道。本文介绍如何利用AI工具高效刷LeetCode,通过通义灵码插件在IntelliJ IDEA中实现代码生成、优化、单元测试等功能,提升编程学习效率。
57 1
通义灵码:融合创新玩法与探索,重塑LeetCode解题策略
|
23天前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
21 2
|
23天前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
20 0
|
24天前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
49 0
|
2月前
|
算法 前端开发 机器人
一文了解分而治之和动态规则算法在前端中的应用
该文章详细介绍了分而治之策略和动态规划算法在前端开发中的应用,并通过具体的例子和LeetCode题目解析来说明这两种算法的特点及使用场景。
一文了解分而治之和动态规则算法在前端中的应用
|
1月前
|
算法 C++
【算法解题思想】动态规划+深度优先搜索(C/C++)
【算法解题思想】动态规划+深度优先搜索(C/C++)
|
3月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
65 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
2月前
|
算法 前端开发
一文了解贪心算法和回溯算法在前端中的应用
该文章深入讲解了贪心算法与回溯算法的原理及其在前端开发中的具体应用,并通过分析LeetCode题目来展示这两种算法的解题思路与实现方法。