# 移动零(283)

# 题目

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

# 示例

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

# 说明

  • 必须在原数组上操作,不能拷贝额外的数组。
  • 尽量减少操作次数。

# 算法

# 双指针

声明两个指向数组头部的指针ijj向后依次遍历,遇到不为0的数字,便将nums[i]nums[j]交换,(即将非零数字提前到前方没有0的位置,且保持顺序),然后让指针i++,然后增加指针j继续查找

循环结束的条件是指针j指向了数组的结尾

export const moveZeroes = (nums) => {
	let i = 0,
		j = 0;
	while (j < nums.length) {
		if (nums[j] !== 0) {
			[nums[i], nums[j]] = [nums[j], nums[i]];
			i++;
		}
		j++;
	}
	return nums;
};
1
2
3
4
5
6
7
8
9
10
11
12

# sort()

export const moveZeroes = (nums) => {
	return nums.sort((a, b) => {
		if (a === 0) return 1;
		else if (b === 0) return -1;
		else return 0;
	});
};
1
2
3
4
5
6
7