算法训练营第十一天| 80.删除有序数组中的重复项||
题意 给你一个有序数组 nums 请你 原地 删除重复出现的元素使得出现次数超过两次的元素只出现两次 返回删除后数组的新长度。 不要使用额外的数组空间你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。题目链接https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/视频链接https://www.bilibili.com/video/BV18G5UzzE8c/解题思路因为数组是有序的所以相同元素必然是连续的。我们用双指针法- i 慢指针指向已处理好的、满足条件的数组末尾 - j 快指针遍历整个数组 - 规则当 nums[j] 与 nums[i-2] 不同时说明当前元素还可以保留最多两次就把它放到 nums[i] 的位置并让 i代码实现示例int removeDuplicates(int* nums, int numsSize) { // 数组长度小于等于2时直接返回原长度 if (numsSize 2) { return numsSize; } // i指向已处理部分的下一个位置 int i 2; for (int j 2; j numsSize; j) { // 当nums[j]和nums[i-2]不同时说明还可以保留 if (nums[j] ! nums[i - 2]) { nums[i] nums[j]; i; } } return i; }