题目描述:
给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素最多出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
解题思路:
这个问题的主要解决方案是使用一个变量 index 作为新数组的索引。对原数组进行遍历,当遍历到的元素不等于新数组前两个元素,或者新数组长度还不到2时(即还没有两个元素),就将遍历到的元素放入新数组。
以下是代码的详细注释:
class Solution {
public int removeDuplicates(int[] nums) {
int index=0; // 新数组的索引初始化为0
// 遍历原数组
for(int num:nums){
// 当新数组长度还不到2或者遍历到的元素不等于新数组前两个元素时
if(index<2 || nums[index-2]!=num){
// 将遍历到的元素放入新数组
nums[index++]=num;
}
}
// 返回新数组的长度
return index;
}
}