参考答案

原地去重有序数组,也就是在不创建新数组的情况下修改原始数组。

可以使用双指针的方法,以下是一个示例的实现:

function removeDuplicates(nums) { if (nums.length === 0) { return 0; } let slow = 0; for (let fast = 1; fast < nums.length; fast++) { if (nums[fast] !== nums[slow]) { slow++; nums[slow] = nums[fast]; } } return slow + 1; } // 示例用法 const nums = [1, 1, 2, 2, 2, 3, 4, 4, 5]; const length = removeDuplicates(nums); console.log("去重后的数组:", nums.slice(0, length)); console.log("数组长度:", length);

在上面的代码中,我们定义了一个 removeDuplicates 函数,它接受一个有序数组 nums 作为参数。通过使用双指针来遍历数组,其中 slow 表示慢指针,用于记录当前不重复元素的位置。

我们从数组的第二个元素(即下标为1的元素)开始遍历,将其与慢指针指向的元素进行比较。如果它们不相等,说明遇到了一个新的不重复元素,将慢指针后移一位,并将新的元素放入该位置。如果它们相等,则跳过该元素,继续向后遍历。

最后,返回慢指针的位置加1,即为去重后的数组长度。可以通过 nums.slice(0, length) 来获取去重后的数组。