您的位置:首页 > Web前端 > JavaScript

[LeetCode][JavaScript]Move Zeroes

2015-09-20 00:40 561 查看

Move Zeroes

Given an array
nums
, write a function to move all
0
's to the end of it while maintaining the relative order of the non-zero elements.

For example, given
nums = [0, 1, 0, 3, 12]
, after calling your function,
nums
should be
[1, 3, 12, 0, 0]
.

Note:

You must do this in-place without making a copy of the array.

Minimize the total number of operations.

https://leetcode.com/problems/move-zeroes/

把数组中所有的零放到最后,不能简单地再开一个数组。

第一种优雅的做法,开一个变量count=0,把数组中不为零的数,按顺序移动到下标为count的位置上,每移动一个count++,最后补上0。

/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
var count = 0;
for(var i = 0; i < nums.length; i++){
if(nums[i] !== 0){
nums[count] = nums[i];
count++;
}
}
for(; count < nums.length ; count++){
nums[count] = 0;
}
};


第二种调用了强大的splice方法,先记录下0的位置,从后往前把0从数组中删掉(从前往后会打乱下标的顺序),最后再补齐。

/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
var indexArr = [], i;
for(i = 0; i < nums.length; i++){
if(nums[i] === 0){
indexArr.push(i);
}
}
for(i = indexArr.length - 1; i >= 0; i--){
nums.splice(indexArr[i], 1);
}
for(i = 0; i < indexArr.length; i++){
nums.push(0);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: