一、今日任务第11天 删除有序数组中的重复项 II今日任务80. 删除有序数组中的重复项 II 巩固滑动窗口算法提交第二周学习小结题意给你一个有序数组 nums 请你 原地 删除重复出现的元素使得出现次数超过两次的元素只出现两次 返回删除后数组的新长度。不要使用额外的数组空间你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。题目链接https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/视频链接https://www.bilibili.com/video/BV18G5UzzE8c/二、初次解题与思考昨天刚做了“26.删除有序数组中的重复项”每个元素只保留一次今天这道题是它的进阶版每个元素最多保留两次。延续昨天的双指针思路但需要增加一个计数器来记录当前元素出现的次数。当遇到重复元素时判断已出现的次数是否小于2决定是否保留。三、代码实现与注意点注意点边界条件数组长度 ≤ 2 时无需处理slow初始值从2开始因为前两个元素无论是什么都可以保留比较索引slow-2而不是slow-1这是保证最多保留两个的关键通用扩展如果题目改成最多保留k个只需将2改成kslow-2改成slow-k复杂度时间复杂度O(n)一次遍历空间复杂度O(1)只使用了常数个变量四、操作五、今日收获昨天比较fast与slow-1今天比较fast与slow-2这种细微调整体现了算法的可扩展性不需要额外的计数器变量利用数组有序和已处理区域的性质直接通过索引比较代码简洁但逻辑深刻培养举一反三的能力已处理区域的前k个元素就是“标准答案”的前k个重复元素必然连续出现理解了“最多保留k个”的通用模板