这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战
一、了解题目
附上原题链接:283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
二、题解分析
1、题意剖析
依据以上题意,首先我们想到的是用双指针的方式来进行求解。具体方式为:
- 慢指针所指向的都是不等于
0的元素,筛选出一个不等于0的元素就放到慢指针所指的位置,然后让慢指针前进一步; - 当快指针走到末尾的时候,所有数即全部交换完毕了。
2、题解步骤
依据以上所剖析的结果,我们来罗列出具体的解题步骤。如下所示:
- 定义一个快指针和一个慢指针;
- 建立一个循环,判断条件是快指针必须小于数组的长度;
- 判断快指针当前所在位置的数字是否为0;
- 如果不是
0,将快指针和慢指针的位置进行交换; - 如果是
0,则将快指针进行+1操作; - 最终返回结果。
三、代码实现
依据上面的题解,我们将用 js 来实现这道题。具体实现代码如下:
/**
* @description leetcode 283.移动零
*/
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function (nums) {
// 1.定义一个快指针和一个慢指针
let fast = 0,
slow = 0;
// 2.判断条件:快指针必须小于数组的长度
while (fast < nums.length) {
// 2.1 判断快指针当前所在位置的数字是否为0
if (nums[fast] !== 0) {
// 2.1.1 将快指针和慢指针的位置进行交换
[nums[fast], nums[slow]] = [nums[slow], nums[fast]];
slow++;
}
// 2.2 当快指针所在位置的数字为0时,那么将快指针进行+1操作
fast++;
}
// 3.返回结果
return nums;
};
console.log(moveZeroes([0,1,0,3,12])); // [ 1, 3, 12, 0, 0 ]
思路来源:移动零
以上就是关于移动零的题解,不知道对小伙伴们是否有帮助呢?
我们下期见👋👋👋