您的位置:首页 > 编程语言 > C语言/C++

leetcode 虐我篇之(六)Remove Duplicates from Sorted Array II

2014-07-31 00:58 429 查看
    在做完Remove Duplicates from Sorted Array后就想着做这道题了,以为像链表那题一样是完全去掉重复出现的数,想不到是去掉重复3次以上的。题目如下:

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].    看了题目就知道可以用移除数组中重复值的代码稍微改改就好。一开始,我是设了两个标志位,判断是不是有两个相同的值,然后if-else语句中又添加了一堆标志位判断情况该怎么赋值之类的。弄了好一会儿。后面想想,其实不用那么复杂,就在判断相等的地方加个计数器,当计数为1时,表明有两个值相等了,这时将相等的数移到前面去,哈哈,这时候就完全变成之前的题目了,代码完全不需要改动,记得在不等的时候计数器清零就好。瞬间觉得好聪明。
    代码如下:

int removeDuplicates2(int A[], int n)
{
if (2>= n)
{
return n;
}

int num = 0;
int i = 0;

int eqNum = 0;

//判断大于等于3个的情况
for (;i < n-1; i++)
{
if (A[i] == A[i+1])
{
//相同数字计数器,当第一次进来时,表明有两个数相等,这时,将这个数移到前面去,同时num加一,
//这时候就将题目编成了之前去重的情况了。其它代码不用改变
eqNum++;
if (1 == eqNum)
{
A[num] = A[i];
num++;
}
}
else
{
//如果不等,则将前一个移到前面去
eqNum = 0;

A[num] = A[i];
num++;
}
}

//最后一个位置要加上去
A[num] = A[i];

return num+1;
}
    想不到那么快就1点了,今天同学来一起吃了个饭,然后回宿舍又吃了西瓜,肚子好胀,总感觉好渴,又一直喝水,今天晚上又热,怕是很难睡着咯。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息