关于javascript:Leetcode283移动零双指针解法

24次阅读

共计 616 个字符,预计需要花费 2 分钟才能阅读完成。

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] 的值,感兴趣的打印一下每一步就明确了。

正文完
 0