[英]Is there any leak in my code, Only 1 case isn't working I don't know why?
我正在尝试编写一个程序来移动数组末尾的所有零并保留其他元素的原始顺序。
这是我的代码:-
var moveZeros = function (arr) {
// TODO: Program me
var k=0;
for (var i=0;i<=arr.length-1;i++){
var s=arr[i];
if (s===0){
arr.splice(i,1);
k++
}
}
for (var j=0;j<=k-1;j++){
arr.push(0);
}
return arr
}
但是当零像 [1,0,0,1] 这样彼此相邻时,它就不起作用了。
我不明白为什么。
有人可以告诉吗?
并且请通过观察 output 来解释为什么 k-1 不是 k 我写了 k-1。 请不要告诉原始问题的答案我只想用我的代码解决问题。 :)
问题是在每个循环中,您将i
变量增加一。 意思是,你 go 到下一个索引。 但是,如果行中有 2 个或多个零,并且删除了第一个零,则不应将i
更改为i + 1
,因为i
已经指向数组中的新值(为零):)
var moveZeros = function (arr) {
// TODO: Program me
var k = 0;
for (var i = 0; i <= arr.length - 1;) {
var s = arr[i];
if (s === 0) {
arr.splice(i, 1);
k++;
} else {
i++;
}
}
for (var j = 0; j <= k - 1; j++) {
arr.push(0);
}
return arr;
};
console.log(moveZeros([1,0,0,2]));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.