题目描述:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
题目实例:
分析题目大意:
这道题的要求很简单就是将数组中有0的元素全部移到数组最后,同时也需要保持移出前数组元素的位置,也就是说将数组0移到最后,后面的数组依次向前移动相应的位数。
解题思路:
这道题最开始想到的肯定是循环,但是如果是使用单纯的循环(就是使用循环遍历的同时筛查符合条件的结果),其实并不好,因为会产生一个问题,当有两个0相邻的时候,无法得到想要的结果,看题目可以得出,他的要求是双指针,根据这个思路再来看我们的题目,那么双指针无疑是一个很好的解题思路,我们可以定义两个指针,一个指针的作用是记录数组中值为0 的元素的位置,另外一个指针则是指出在这个数组值为0的元素的下一个非零的元素的位置(有点绕),当满足条件的时候,将这两个元素进行对调,就可以得到想要的结果
代码如下:
var moveZeroes = function(nums) {
let low=0,high=0,i=0
n=nums.length
while(i<n){
if(nums[i]!=0){
mid=nums[low]
nums[low]=nums[high]
nums[high]=mid
low++
}
i++
high++
}
return nums
};
但是这样写其实算是牺牲了时间换内存,所以我们也可以换和他思路相同,但是时间花销少的另外一种写法,这种写法是使用for来写的,具体代码如下:
var moveZeroes = function(nums) {
let n = nums.length
let left = 0, right = 0
for(let i = 0; i < n; i++){
if(nums[i]!=0){
temp = nums[left]
nums[left] = nums[right]
nums[right] = temp
left ++
}
right++
}
};
以上就是今天的算法,今天因为别的事情,所以晚上才有时间去做算法