第 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 解法。理解状态如何变化,比记住代码更重要。