LeetCode 80.删除有序数组中的重复项 II
Posted KyrieLiu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 80.删除有序数组中的重复项 II相关的知识,希望对你有一定的参考价值。
与LeetCode26不同,允许一个元素最多出现两次
解法一:双指针法+计数器
分析:
仍然使用双指针法,一个用来覆盖(下面代码中的
index
),一个用来遍历(下面代码中的i
)区别在于,使用一个计数器count,代表当前正在遍历的元素(即
i
指向的元素)重复的次数,初始值为1,即重复1次(不重复)1)如果
nums[i] == nums[i-1]
,就增加重复次数计数器count2)否则,就重置count为1
让当前重复次数小于等于2的元素覆盖到
index
的位置,并后移index指针。
代码
int removeDuplicates2(vector<int>& nums){
if(nums.size()<=2) return nums.size();
//使用count,计数器
int count=1;
int index=1; //下次要替换的元素位置
for(int i=1;i<nums.size();i++){
if(nums[i]==nums[i-1])
count++;
else
count=1;
if(count<=2){
nums[index]=nums[i];
index++;
}
}
return index;
}
解法二:双指针法(不使用计数器)
分析:
仍然使用双指针法,一个指向下一个覆盖的位置(下面代码中的
index
),一个用来遍历(下面代码中的i
)区别在于,比较
nums[i]
和nums[i-2]
:1)如果
nums[i] == nums[i-2]
,就让i
后移2)如果
nums[i] != nums[i-2]
,就将i
指向的元素 赋值 到index
的位置,然后后移index
和i
。因为,一个元素
nums[i]
如果最多出现两次,他与nums[i-2]
一定不同,就满足要求,可以添加到前面的序列中,覆盖前面的元素,否则,就出现了两次以上,不满足要求,直接后移i
即可。
代码
int removeDuplicates2(vector<int>& nums){
if(nums.size()<=2) return nums.size();
//不使用count
int index=2;
for(int i=2;i<nums.size();i++){
if(nums[i] != nums[index-2]){
nums[index++] = nums[i];
}
}
return index;
}
以上是关于LeetCode 80.删除有序数组中的重复项 II的主要内容,如果未能解决你的问题,请参考以下文章
Python描述 LeetCode 80. 删除有序数组中的重复项 II
Python描述 LeetCode 80. 删除有序数组中的重复项 II
Python描述 LeetCode 80. 删除有序数组中的重复项 II