每日一道算法Day11

198 阅读1分钟

题目描述

image.png

export function removeDuplicates(nums: number[]): number {
  
  // while (i < len && nums[i] !== undefined) {
  // 因为是升序数组, 比较当前和当前下一个值, 下一个与当前相等便将它移出数组(最开始没明白题目意思, 以为数组也得移除重复项)
  //   if (nums[i + 1] === nums[i]) {
  //     nums.splice(i + 1, 1);
  //   } else {
  //  下个值大于当前值, 从下个值开始新的一轮比较
  //     i += 1;
  //   }
  // }
  // return nums.length;

  //🧍‍♂️ 快慢指针... 太强了
  let fast = 1;
  let slow = 0;
  while (fast < nums.length) {
    if (nums[fast] > nums[slow]) nums[++slow] = nums[fast];
    fast++;
  }
  return ++slow;
}