手写算法: 删除有序数组中的重复项

26. 删除有序数组中的重复项open in new window

思路

  1. 删除数组中重复项,首先我们知道了这是一个有序数组,那么相等的元素在数组中也是连续的,那么可以利用数组的下标

  2. 判断当前数组的长度,如果为 0 ,则直接 return0

  3. 当数组的长度大于 0 时,数组内的元素至少为一个,那么删除重复数组后,也至少为一个,因此 nums[0]保持原状即可,从下标 1 开始删除元素

  4. 用双指针,slow 指针用于指下个不同元素要填入的下标,fast 指针指向到达下标的位置。那么只要 nums[fast] !== nums[fast - 1],就能说明这不是同一元素,可以填入 slow

function removeDuplicates(nums) {
  const len = nums.length;
  if (len === 0) return 0;

  let slow = (fast = 1);
  while (fast < len) {
    if (nums[fast] !== nums[fast - 1]) {
      nums[slow] = nums[fast];
      slow++;
    }
    fast++;
  }
  return slow;
}

手写题: 实现 OmitThisParameter<T>

15. 实现 OmitThisParameteropen in new window

type MyOmitThisParameter<T> = T extends (...args: any[]) => infer R ? () => R : never;
Last Updated:
Contributors: kk