今天是第四题,也是简单题一道,再来几道题目估计就要开始进军中级难度的了。题目如下:
这道题是要将所有的0移动到数组的末尾,并且要保持原来非零整数的原有顺序。想到的方法就是遍历数组,并用非零整数覆盖0。代码如下:
/** * @param {number[]} nums * @return {void} Do not return anything, modify nums in-place instead. */ var moveZeroes = function(nums) { let lnum = nums.length, i = 0; while(i < lnum){ if(nums[i] == 0){ for(let j = i ; j < lnum - 1; j++){ nums[j] = nums[j+1]; } lnum--; nums[lnum] = 0; }else{ i++; } } };
看了一下答案,还可以用下面的方法:
1 /** 2 * @param {number[]} nums 3 * @return {void} Do not return anything, modify nums in-place instead. 4 */ 5 var moveZeroes = function(nums) { 6 let lastNonZeroFoundAt = 0; 7 8 for (let i = 0; i < nums.length; i++) { 9 if (nums[i] != 0) { 10 nums[lastNonZeroFoundAt++] = nums[i]; 11 } 12 } 13 14 for (let i = lastNonZeroFoundAt; i < nums.length; i++) { 15 nums[i] = 0; 16 } 17 };
这种方法原理跟第一种差不多,不过代码更加简化了。