Skip to main content

283. 移动零

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

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

示例 1

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

示例 2

输入: nums = [0]
输出: [0]

答案

  1. 从 0 开始遍历
  2. 不是 0 则交换
    let temp = nums[i]
    nums[j] = nums[i]
    nums[i] = temp
  3. j++
var moveZeroes = function(nums) {
let j = 0;
for (let i = 0; i < nums.length; i++) {
if (nums[i] !== 0) {
// 交换位置
let temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;

j++;
}
}
return nums
};
var nums = [0,0,1]

moveZeroes(nums)

双指针一次遍历

思路:定义 left、right 指针,right 从左往右移动,遇上非 0 元素,交换 left 和 right 对应的元素,交换之后 left++

复杂度:时间复杂度 O(n),空间复杂度 O(1)

var moveZeroes = function(nums) {
let left=0,right=0
while(right<nums.length){
if(nums[right]!==0){//遇上非0元素,交换left和right对应的元素
swap(nums,left,right)
left++//交换之后left++
}
right++
}
};

function swap(nums,l,r){
let temp=nums[r]
nums[r]=nums[l]
nums[l]=temp
}