题目
给定一个数组
nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。
输入: nums = [0,1,0,3,12] 输出: [1,3,12,0,0]
思路一
我们这里直接使用循环,在循环中我们判断当前的形参nums的每一项是否等于0,如果等于0则使用splice方法对当前nums所在当前项的元素进行删除,然后再使用push方法将0添加到形参nums中
var moveZeroes = function (nums) { for (let i = 0 ; i<nums.length;i++) { if (nums[i]==0) { nums.splice(i, 1); nums.push(0); } } }
思路二
我们这里可以使用双指针的方式进行实现,我们先创建两个变量,分别为left和right变量,默认值都为0,他们分别代表着左指针和右指针,left变量的值指向处理好的前半段数据的后一个,right变量指向未处理的数组最前面一个,然后我们进行循环,循环条件设定为如果当前的right变量小于当前形参的nums的数据长度则进入循环,在循环中我们进行判断当前形参nums的right变量位置是否不等于0,如果不等于0则进入循环,在循环中我们声明一个temp变量,默认值为形参nums数组的right变量位置值,我们用temp变量作为中介,将形参nums的left变量位置值和right变量位置值进行互换,最后将left变量进行自增1,无论形参nums的right变量位置值是否等于0,都将right变量进行自增1,直到right变量遍历完成
var moveZeroes = function(nums) { let left=0,right=0 while(right<nums.length){ if(nums[right]!=0){ let temp=nums[right] nums[right]=nums[left] nums[left]=temp left++ } right++ } };