Leetcode283挪动零(双指针解法)

给定一个数组 nums,编写一个函数将所有 0 挪动到数组的开端,同时放弃非零元素的绝对程序。

请留神 ,必须在不复制数组的状况下原地对数组进行操作。

答题:

/** \* @param {number[]} nums \* @return {void} Do not return anything, modify nums in-place instead. */var moveZeroes = function(nums) {  let left = 0  let right = 0  while(right < nums.length){    if(nums[right] !== 0){      let tem = nums[right]      nums[right] = nums[left]      nums[left] = tem      left++    }    right++  }};

很多人做题的时候不太理解题意

认真读题咱们应该明确这两点:

一就是不能复制数组,那么咱们只能通过替换数组中的元素来进行实现

二就是数组替换时的逻辑应该是一个非零元素和一个0元素进行替换

为此咱们须要两个指针,一个指针用来指向当下遍历到的元素,也就是right。另一个left是用来记录应该用来替换的数组元素地位

随着元素往右遍历,不论交不替换,right都须要进行+1操作,而如果nums[right]的值不等于0则须要进行替换,left记录下一个应该替换的索引地位,这里不必管nums[left]的值,感兴趣的打印一下每一步就明确了。