参考答案:
原地去重有序数组,也就是在不创建新数组的情况下修改原始数组。
可以使用双指针的方法,以下是一个示例的实现:
1function removeDuplicates(nums) { 2 if (nums.length === 0) { 3 return 0; 4 } 5 6 let slow = 0; 7 8 for (let fast = 1; fast < nums.length; fast++) { 9 if (nums[fast] !== nums[slow]) { 10 slow++; 11 nums[slow] = nums[fast]; 12 } 13 } 14 15 return slow + 1; 16} 17 18// 示例用法 19const nums = [1, 1, 2, 2, 2, 3, 4, 4, 5]; 20const length = removeDuplicates(nums); 21 22console.log("去重后的数组:", nums.slice(0, length)); 23console.log("数组长度:", length);
在上面的代码中,我们定义了一个 removeDuplicates
函数,它接受一个有序数组 nums
作为参数。通过使用双指针来遍历数组,其中 slow
表示慢指针,用于记录当前不重复元素的位置。
我们从数组的第二个元素(即下标为1的元素)开始遍历,将其与慢指针指向的元素进行比较。如果它们不相等,说明遇到了一个新的不重复元素,将慢指针后移一位,并将新的元素放入该位置。如果它们相等,则跳过该元素,继续向后遍历。
最后,返回慢指针的位置加1,即为去重后的数组长度。可以通过 nums.slice(0, length)
来获取去重后的数组。
最近更新时间:2023-06-26