题目描述
题目描述
题解
题解
提交记录
提交记录
中等

给定一个按 非递减顺序 排列的整数数组 nums,请你 原地 删除部分重复元素,使得每个不同的元素 最多出现两次。元素的 相对顺序 应保持 不变。

由于在某些语言中无法改变数组的长度,因此必须将结果放在数组 nums 的前半部分。更准确地说,如果删除重复元素后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。前 k 个元素之后的内容无关紧要。

将最终结果放入 nums 的前 k 个位置后,返回 k。

不要 为另一个数组分配额外空间。你必须使用 O(1) 的额外内存,通过 原地 修改输入数组 来完成此操作。

自定义判题:

判题程序将使用以下代码测试你的解答:

int[] nums = [...]; // 输入数组
int[] expectedNums = [...]; // 长度正确的预期答案

int k = removeDuplicates(nums); // 调用你的实现

assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
    assert nums[i] == expectedNums[i];
}

如果所有断言都通过,那么你的解答将被 接受。

 

示例 1:

输入:nums = [1,1,1,2,2,3]
输出:5, nums = [1,1,2,2,3,_]
解释:你的函数应该返回 k = 5,并且 nums 的前五个元素分别为 1、1、2、2 和 3。
返回的 k 之后的元素是什么并不重要(因此用下划线表示)。

示例 2:

输入:nums = [0,0,1,1,1,1,2,3,3]
输出:7, nums = [0,0,1,1,2,3,3,_,_]
解释:你的函数应该返回 k = 7,并且 nums 的前七个元素分别为 0、0、1、1、2、3 和 3。
返回的 k 之后的元素是什么并不重要(因此用下划线表示)。

 

提示:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • nums 已按 非递减 顺序排列。
 
代码
代码
测试用例
测试用例
测试结果
测试结果