原题网址:http://www.lintcode.com/zh-cn/problem/remove-duplicates-from-sorted-array-ii/#
跟进“删除重复数字”:
如果可以允许出现两次重复将如何处理?
标签
思路:还是原来的方法,只不过多设置一个count用来记录当前元素个数。数组分为结果区和待处理区,i为结果区最后一个元素的下标,j为待判断区第一个元素下标。
若nums[i]与nums[j]相等并且count=1或者nums[i]不等于nums[j],将nums[j]添加到结果区,i++,这里分为两个情况:若nums[i]与nums[j]相等则count=2,若nums[i]与nums[j]不相等说明结果区添加的是新元素,count重置为1;
否则继续判断下一个元素;
最后resize数组只保留结果区,并返回i+1。
AC代码:
class Solution {
public:
/**
* @param A: a list of integers
* @return : return an integer
*/
int removeDuplicates(vector<int> &nums) {
// write your code here
int size=nums.size();
if (size==0)
{
return 0;
}
int i=0,j=1,count=1;
while(j<size)
{
if ((nums[i]==nums[j]&&count==1)||nums[i]!=nums[j])
{
if (nums[i]==nums[j])
{
count=2;
}
else
{
count=1;
}
nums[i+1]=nums[j];
i++;
}
j++;
}
nums.resize(i+1);
return i+1;
}
};