题意给你一个有序数组 nums 请你 原地 删除重复出现的元素使得出现次数超过两次的元素只出现两次 返回删除后数组的新长度。不要使用额外的数组空间你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。题目链接https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/视频链接https://www.bilibili.com/video/BV18G5UzzE8c/一 我的思路这题是上一题的升级版。上一题是每个数字只留 1 个这题是每个数字最多留 2 个。思路还是双指针慢指针记录新数组该放哪里快指针遍历整个数组只要当前数字 和 慢指针前面第二个数字不一样就保留二 代码的实现class Solution { public: int removeDuplicates(vectorint nums) { if (nums.size() 2) return nums.size(); int slow 2; for (int fast 2; fast nums.size(); fast) { if (nums[fast] ! nums[slow - 2]) { nums[slow] nums[fast]; slow; } } return slow; } };三 我遇到的困难1 一开始还是想删元素结果越写越乱2 不知道要从下标 2 开始判断3 搞不懂为什么要和 slow-2 比较4 边界条件经常忘比如数组长度小于 2 的情况5 指针顺序搞反调试好几次才过四 学习总结这道题是有序数组去重的进阶版跟着双指针思路走核心每个数字最多留两个只要快指针的数不和慢指针前面第二个数重复就留下来。比起上一题只留一个这题只是多了一步判断逻辑几乎一样。学会这道题我对双指针的用法更熟悉了也更敢做数组题了虽然还是会踩坑但至少能独立写出来真的很有成就感