移动零-简单
难度:简单
描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0, 1, 0, 3, 12];
输出: [1, 3, 12, 0, 0];
1
2
2
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
解题思路:
- 利用双指针,遍历数组,当前元素值为 0,位置移动后右指针前移,当前元素不为 0 时,左指针前移
代码实现:
var moveZeroes = function (data) {
let i = 0;
let j = data.length;
while (i < j) {
if (data[i] === 0) {
data.splice(i, 1);
data.push(0);
j--;
}
if (data[i] !== 0) {
i++;
}
}
return data;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 双指针,i 用来遍历数组,j 表示最后一个 0 的下标
- 当 i 遇到 0 时,i++
- 当 i 不是 0 时,j+1,如果 j<i,nums[j] = nums[i], nums[i] =0
var moveZeroes = function (nums) {
let i = 0,
j = 0;
while (i < nums.length) {
if (nums[i] != 0) {
if (j < i) {
nums[j] = nums[i];
nums[i] = 0;
}
j++;
}
i++;
}
return nums;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15