Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array A = [1,1,1,2,2,3]
,
Your function should return length = 5
,
and A is now [1,1,2,2,3]
.
思路:需要一个标志位记录当前这个数出现的次数,如果和前面的不相等,肯定得覆盖,并且记录出现了两次,如果和前面相等,那么出现次数多一次,如果出现的次数已经为两次,那么也允许覆盖。
#include <iostream> #include <vector> using namespace std; /* Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For example, Given sorted array A = [1,1,1,2,2,3], Your function should return length = 5, and A is now [1,1,2,2,3]. */ int RemoveDuplicate(vector<int>& vec) { if(vec.size()<=2) return vec.size(); int i,flag=1,j; i =0; for(j=1;j<vec.size();j++) { if(vec[j] != vec[j-1]) { i++; vec[i] = vec[j]; flag =1; } else { flag++; if(flag==2) { i++; vec[i] = vec[j]; } } } return i+1; } int main() { int array[]={1,1,2,2,3,4,4,5,6,7}; vector<int> vec(array,array+sizeof(array)/sizeof(int)); cout<<RemoveDuplicate(vec); return 0; }
Remove Duplicates from Sorted Array II--LeetCode
原文:http://blog.csdn.net/yusiguyuan/article/details/44774857