[LeetCode][JavaScript]Move Zeroes

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:

    1. You must do this in-place without making a copy of the array.
    2. Minimize the total number of operations.

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

 

 


 

 

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

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

 1 /**
 2  * @param {number[]} nums
 3  * @return {void} Do not return anything, modify nums in-place instead.
 4  */
 5 var moveZeroes = function(nums) {
 6     var count = 0;
 7     for(var i = 0; i < nums.length; i++){
 8         if(nums[i] !== 0){
 9             nums[count] = nums[i];
10             count++;
11         }
12     }
13     for(; count < nums.length ; count++){
14         nums[count] = 0;
15     }  
16 };

 

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

 1 /**
 2  * @param {number[]} nums
 3  * @return {void} Do not return anything, modify nums in-place instead.
 4  */
 5 var moveZeroes = function(nums) {
 6     var indexArr = [], i;
 7     for(i = 0; i < nums.length; i++){
 8         if(nums[i] === 0){
 9             indexArr.push(i);
10         }
11     }
12     for(i = indexArr.length - 1; i >= 0; i--){
13         nums.splice(indexArr[i], 1);
14     }
15     for(i = 0; i < indexArr.length; i++){
16         nums.push(0);
17     }
18 };

 

 

posted @ 2015-09-20 00:40  `Liok  阅读(814)  评论(0编辑  收藏  举报