算法学习第11天LeetCode 80 删除有序数组中的重复项Ⅱ 双指针/滑动窗口精讲全体成员 打卡今天是算法训练第11天我们攻克LeetCode 80. 删除有序数组中的重复项Ⅱ巩固双指针滑动窗口并完成第二周学习小结 题目回顾给你有序数组nums原地删除重复元素使得每个元素最多出现2次返回新数组长度。要求O(1)额外空间、原地修改 。示例- 输入[1,1,1,2,2,3] → 输出5数组变为[1,1,2,2,3]- 输入[0,0,1,1,1,1,2,3,3] → 输出7数组变为[0,0,1,1,2,3,3] 核心思路快慢指针滑动窗口这是26题删除有序数组中的重复项的进阶版核心变化从最多1次→最多2次。指针定义- fast快指针遍历原数组找合法元素- slow慢指针指向下一个可写入的位置维护合法前缀长度- 关键规则nums[fast] ! nums[slow-2] 时才保留保证最多2个重复。为什么比较 slow-2数组有序相同元素连续。只要当前元素 ≠ 慢指针前两位就说明还没到第三次可以安全保留。✅ 代码实现Javajavaclass Solution {public int removeDuplicates(int[] nums) {int n nums.length;// 长度≤2直接返回if (n 2) {return n;}// 前两位一定合法从下标2开始int slow 2;for (int fast 2; fast n; fast) {// 核心判断最多保留2个if (nums[fast] ! nums[slow - 2]) {nums[slow] nums[fast];slow;}}return slow;}}复杂度- 时间O(n)一次遍历- 空间O(1)仅用两个指针符合题目要求 。 举一反三- 最多保留k次只需把判断改为 nums[fast] ! nums[slow-k]- 同类题26.删除重复项、27.移除元素、283.移动零都是原地数组双指针模板题 第二周学习小结可直接提交1. 本周重点双指针、滑动窗口、原地数组修改2. 核心收获- 掌握快慢指针在去重、覆盖、过滤场景的通用写法- 理解有序数组的重复判断优化只看相邻/固定偏移位- 牢记面试高频要求原地、O(1)空间、一次遍历3. 薄弱点复杂窗口边界判断需要多手写模拟过程4. 下周计划强化双指针变种拓展滑动窗口在字符串/子数组的应用 学习资源- 题目链接https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/- 视频讲解https://www.bilibili.com/video/BV18G5UzzE8c/