初级算法(第八题)
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例1:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
解题思路
- 首先题目要求是将所有的零放到数组后面去,其他不为零的元素再前面,并且不能破坏原有顺序
- 那么我们就有两种思路,第一种究是把不为零的往前移动,第二种就是把0都扔到数组末尾去。显然还是第一种比较简便快捷。
- 本题采用的是双指针,然后我写了两种方法。第一种是把不为零的全部移到前面后面的全部用0覆盖掉,第二种是通过两两对比然后移形换位
话不多说上代码
第一种解法:
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
let index = 0;
for(let i = 0; i< nums.length; i++){
if(nums[i] !== 0){
nums[index++] = nums[i];
}
}
while(index < nums.length){
nums[index++] = 0;
}
return nums;
};
第二种解法
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
let left = 0;
let right = 1;
for(right; right < nums.length; right ++ ){
if(nums[left] === 0 && nums[right] !== 0){
let middle = nums[left];
nums[left] = nums[right];
nums[right] = middle;
}
if(nums[left] !== 0){
left++
}
}
return nums;
};