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

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理