每天一道力扣题: 283. 移动零
题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
思路
双指针两次遍历

/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
if (!nums.length) return nums
// 1. 遍历,非0元素往前移动
let j = 0 // 记住非0元素的最后索引
for (i = 0; i < nums.length; i++) {
if (nums[i]) {
nums[j++] = nums[i] // 统计非0元素
}
}
// 2. 遍历,为0的元素移动到数组末尾
for (let i = j; i < nums.length; i++) {
nums[i] = 0
}
return nums
};
时间复杂度


双指针一次遍历

/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
if (!nums.length) return nums
// 一次遍历其实就是在区分0与非0时候,直接就交换了
let j = 0 // 记住非0元素的索引
for (i = 0; i < nums.length; i++) {
if (nums[i]) {
// 交换0与非0
let temp = nums[i]
nums[i] = nums[j]
nums[j++] = temp
}
}
return nums
};
时间复杂度


广告位
觉得有意思点个右下角在看,或者直接关注。
