Skip to content

使用 js 实现有序数组原地去重

Posted on:2023年6月26日 at 08:53

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

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

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) 来获取去重后的数组。

原文转自:https://fe.ecool.fun/topic/37b4752f-88bd-4959-8ff7-c081fdbc20cb