解题思路
看完示例,第一反应是使用降序排序,但是排序不符合题意,要求不能改变非零的顺序。写了一般,但是感觉不是特别符合题意。因为题目要去不能复制元素。下面是第一版本的代码:
代码
var moveZeroes = function(nums) {
const len = nums.length;
const res = Array(len).fill(0);
let k = 0;
for(let i = 0;i<len;i++){
if(nums[i] != 0){
res[k] = nums[i];
k++;
}
}
for(let i = 0;i<len;i++){
nums[i] = res[i]
}
return nums;
};
优化
根据题解,可以使用双指针的方式进行解题。定义两个指针,初始值都是从0开始。右侧的指针的值不为0的情况下,交互两个指针的值。然后左边的指针+1,右边的指针在判断结束后,进行+1操作
var moveZeroes1 = function(nums) {
let l = 0,r = 0, n = nums.length;
while(r<n){
if (nums[r] != 0) {
[nums[l],nums[r]] = [nums[r],nums[l]]
l++;
}
r++;
}
return nums;
};
const nums = [0,1,0,3,12]
console.log('--result--',moveZeroes1(nums));