难度:简单
描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
解题思路:
- 利用双指针,遍历数组,当前元素值为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;
};
- 双指针,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 };