Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
思路分析
方法一
- 看到题目的第一反应就是将数组中非零的元素过滤出来,然后按照数组的长度补0;
- 说干就干,使用数组的
filter方法,将非0的数组元素过滤出来,得到arrNo; - 循环数组,将小于
arrNo长度下标的元素赋值为对应arrNo的元素,剩下的都为0。
方法二
- 拓展使用数组的
sort方法; - 我们都知道数组的
sort方法可以将数组按照某个方法进行排序; - 那么也可以将数组按照b进行排序,b如果是0,返回-1,a在b的前方,b在a的后方,即可将0放到数组的最后。
AC 代码
方法一
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
const arrNo = nums.filter(item => item)
for(let i = 0; i < nums.length; i++) {
if(i < arrNo.length) {
nums[i] = arrNo[i]
} else {
nums[i] = 0
}
}
};
结果:
- 执行结果: 通过
- 执行用时:88 ms, 在所有 JavaScript 提交中击败了71.67%的用户
- 内存消耗:46 MB, 在所有 JavaScript 提交中击败了11.80%的用户
- 通过测试用例:74 / 74
方法二
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
nums.sort((a, b) => b ? 0 : -1)
};
结果:
- 执行结果: 通过
- 执行用时:80 ms, 在所有 JavaScript 提交中击败了90.48%的用户
- 内存消耗:45.2 MB, 在所有 JavaScript 提交中击败了56.61%的用户
- 通过测试用例:74 / 74