# 移动零(283)
# 题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
# 示例
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
# 说明
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
# 算法
# 双指针
声明两个指向数组头部的指针i
和j
,j
向后依次遍历,遇到不为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
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
2
3
4
5
6
7