[路飞]_Leetcode 26. 删除有序数组中的重复项

0 阅读2分钟

第 26 题「删除有序数组中的重复项」的突破口,往往藏在「快指针扫描数组」对状态与边界的精确处理里。

Hello,大家好,今天继续按题号刷 LeetCode。

这篇要解决的是 26. 删除有序数组中的重复项。

前言

「删除有序数组中的重复项」的关键是先明确状态或指针代表什么,再让每一步都保持不变量。

1、题目描述

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k 。去重后,返回唯一元素的数量 k 。 nums 的前 k 个元素应包含 排序后 的唯一数字。下标 k - 1 之后的剩余元素可以忽略。 判题标准: 系统会用下面的代码来测试你的题解: 如果所有断言都通过,那么您的题解将被 通过 。

2、解题思路

快指针扫描数组,慢指针指向下一个应写入的位置。遇到新值时写入并前进。

3、代码实现

var removeDuplicates = function(nums) {
  if (!nums.length) return 0;
  let k = 1;
  for (let i = 1; i < nums.length; i++) if (nums[i] !== nums[k - 1]) nums[k++] = nums[i];
  return k;
};

4、复杂度分析

时间 O(n),空间 O(1)。

5、思路总结

  • 核心方法:快指针扫描数组,慢指针指向下一个应写入的位置
  • 关键点:保持状态含义稳定,并在更新时处理边界条件
  • 实现提醒:先验证最小输入、空结构和极端值,再提交代码

结语

以上就是「删除有序数组中的重复项」的 JavaScript 解法。理解状态如何变化,比记住代码更重要。