Blog.

删除有序数组中的重复项

Cover Image for 删除有序数组中的重复项
Bernie
Bernie

删除有序数组中的重复项

leetcode 链接

思路:

快慢指针

  1. 用 slow, fast 分别指向 nums 的第一个元素
  2. 如果 slow 和 fast 指向的元素相同,则 fast 向前移动一位
  3. 如果 slow 和 fast 指向的元素不同,则 slow 向前移动一位,将 fast 指向的元素赋值给 slow 指向的元素,fast 向前移动一位
  4. 重复 2,3 步骤,直到 fast 指向最后一个元素

typescript 解法

function removeDuplicates(nums: number[]): number {
  const len = nums.length;

  if (len == 1) {
    return 1;
  }
  if (len == 2) {
    if (nums[0] === nums[1]) {
      return 1;
    }
  }
  let slow = 0;
  let fast = 1;
  let ret = 1;
  while (slow < fast && fast < len) {
    while (nums[slow] === nums[fast]) {
      fast++;
      if (fast === len) {
        return ret;
      }
    }
    slow++;
    nums[slow] = nums[fast];
    fast++;
    ret++;
  }
  return ret;
}

go 解法

func removeDuplicates(nums []int) int {
    ret := 1
    //快慢指针
    if len(nums) == 1 {
        return 1
    }
    if len(nums) == 2 && nums[0] == nums[1]{
        return 1
    }
    slow := 0
    fast := 1
    for slow < fast && fast < len(nums) {
        for nums[fast] == nums[slow] {
            fast ++
            if fast == len(nums) {
                return ret
            }
        }
        slow ++
        nums[slow] = nums[fast]
        fast ++
        ret ++
    }
    return ret
}