我正在用leetcode做Move Zeroes。
我编写了一个函数来解决,但leetcode表示这是错误的答案。
有人可以看到我的代码有什么问题吗?
要求:原始数组必须突变
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
输入:[2,1]
输出:[1,2]
这是我的JS:
var moveZeroes = function(nums) {
var ZeroArray=[]
for(let i=0;i<nums.length;i++){
if(nums[i]===0){
ZeroArray.push(nums[i])
nums.splice(i,1);
}
}
nums.sort((a,b)=>(a-b))
for(let j=0;j<ZeroArray.length;j++){
nums.push(ZeroArray[j])
}
return nums;
};
console.log(moveZeroes([0,1,0,3,12])); //Should return [ 1,3,12,0,0]
console.log(moveZeroes([2,1]));//Should return [1,2]
答案 0 :(得分:2)
您的
nums.shift(nums[i]);
将删除(并丢弃)当时0
中第nums
个索引处的所有内容。如果num不是0
,则推送到 different 数组可能会更容易,然后在末尾组合数组(不进行排序):
var moveZeroes = function(nums) {
var ZeroArray = []
var nonZeroArray = [];
for (let i = 0; i < nums.length; i++) {
if (nums[i] === 0) {
ZeroArray.push(nums[i])
} else {
nonZeroArray.push(nums[i]);
}
}
return [...nonZeroArray, ...ZeroArray];
};
console.log(moveZeroes([0, 1, 0, 3, 12])) //Should return [ 1,3,12,0,0]
或者,如果您确实想.sort
,.sort
仅 :
var moveZeroes = function(nums) {
nums.sort((a, b) => (a === 0) - (b === 0));
return nums;
};
console.log(moveZeroes([0, 1, 0, 3, 12])) //Should return [ 1,3,12,0,0]
请检查=== 0
-否则,您的
.sort((a,b)=>(a-b))
如果您希望0
放在末尾,则将在0
之后放置负数 。
如果您还需要保留非零的原始顺序,请遍历数组,拼接出0
,同时跟踪要删除的数量,然后{{1 }}最后:
push
答案 1 :(得分:1)
Array.shift()
从数组中删除第一个元素,您最有可能想使用Array.splice(i, 1)
答案 2 :(得分:1)
使用过滤器过滤所有非零元素,然后将剩余的数组大小附加零。
let arr = [0,1,0,3,12];
let filtered = arr.filter(item => item !== 0);
let result = [...filtered, ...(new Array(arr.length - filtered.length).fill(0))]
console.log(result);
答案 3 :(得分:0)
使用拼接删除零并计算拼接的值。在循环中将数组中的零推入等于计数
var a=[0,1,0,3,12];
var count=0;
a.forEach(e=>{
if(e==0){
a.splice(a.indexOf(e),1)
count++
}})
for(var i=0;i<count;i++)
a.push(0)
console.log(a)
答案 4 :(得分:0)
对于下一个索引,您可以采用带有附加变量的单循环方法来交换值。
根据规范要求,这种方法可以在原位 起作用。
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
var i, j = 0;
for (i = 0; i < nums.length; i++) {
console.log(...nums); // look!
if (nums[i] !== 0) { // check
[nums[j], nums[i]] = [nums[i], nums[j]]; // swap items
j++; // increment target
}
}
},
array = [0, 1, 0, 3, 12];
moveZeroes(array)
console.log(...array); // [1, 3, 12, 0, 0]
答案 5 :(得分:0)
here is code to remove zeros in c++
void pushZerosToEnd(int arr[], int n)
{
int count = 0;
for (int i = 0; i < n; i++)
if (arr[i] != 0)
arr[count++] = arr[i];
while (count < n)
arr[count++] = 0;
}
int main()
{
int arr[] = {1, 9, 8, 4, 0, 0, 2, 7, 0, 6, 0, 9};
int n = sizeof(arr) / sizeof(arr[0]);
pushZerosToEnd(arr, n);
cout << "Array after pushing all zeros to end of array :n";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
答案 6 :(得分:0)
var a = [1, 2, 0, 0, 3, 0, 3, 0, 2, 0, 0, 0, 5, 0];
function moveZero(b) {
for (var i = b.length - 1; i >= 0; i--) {
if (b[i] === 0) {
b.splice(i, 1);
b.push(0);
}
}
return b;
}
console.log(moveZero(a));