【Daily Interview】- 22 删除排序数组中的重复项

题目

img01

光看题目是很是简单的,但这里有一个限制条件,就是必须在原地修改数组,而且只能使用 O1 的额外空间。数组

其实前面也遇到过相似的限制,好比环形链表,当时咱们的解决方案是快慢指针:事实上,在限制额外空间为 O1 的时候,一般都能使用快慢指针的方式来解决问题,这道题目的目的其实也就是帮助咱们创建使用快慢指针的思惟。ide

这里咱们以数组 [1, 1, 2, 3, 3 ] 为例,建立两个指针 slow 和 fast 都指向 arr[0]:指针

  • 每一次遍历 fast 都自增 1
  • 当 slow == fast,则 slow 不变
  • 当 slow ≠ fast,则 slow 自增 1,而且将 fast 位置的值赋值过来

以上述步骤完成对整个数组的遍历以后,数组就已经实现了重排,而 slow 则指向其尾端,具体能够看看下图:blog

img02

思路很简单,这里直接实现代码便可:ip

var removeDuplicates = function (nums) {  const len = nums.length;  let slow = 0;  for (let fast = 0; fast < len; fast++) {if (nums[fast] !== nums[slow]) {
      slow++;
      nums[slow] = nums[fast];
    }
  }  return slow + 1;
};复制代码

tip????:题目需求是返回新数组的长度,因此返回 slow +1rem

结果以下:get

img03

相关文章
相关标签/搜索