光看题目是很是简单的,但这里有一个限制条件,就是必须在原地修改数组,而且只能使用 O1 的额外空间。数组
其实前面也遇到过相似的限制,好比环形链表,当时咱们的解决方案是快慢指针:事实上,在限制额外空间为 O1 的时候,一般都能使用快慢指针的方式来解决问题,这道题目的目的其实也就是帮助咱们创建使用快慢指针的思惟。ide
这里咱们以数组 [1, 1, 2, 3, 3 ] 为例,建立两个指针 slow 和 fast 都指向 arr[0]:指针
以上述步骤完成对整个数组的遍历以后,数组就已经实现了重排,而 slow 则指向其尾端,具体能够看看下图:blog
思路很简单,这里直接实现代码便可: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