码迷,mamicode.com
首页 > 其他好文 > 详细

Remove Duplicates from Sorted Array II

时间:2015-06-25 09:05:36      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?

For example,
Given sorted array nums = [1,1,1,2,2,3],

Your function should return length = 5, with the first five elements of nums being 1122 and 3. It doesn‘t matter what you leave beyond the new length.

解题思路:删除一个排好序的数组中的重复元素,允许重复两次,两次之上的删掉多余元素。

方法一:

统计两次之内的元素,并且将新数组赋值给原数组。代码如下:
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
          if(nums.size()<=2) return nums.size();
		vector<int> num_new;
        int len=1;
        int n=1;
		int begin=nums[0];
		num_new.push_back(nums[0]);
		for(int i=1;i<nums.size();i++)
		{
			if(nums[i]==begin)
			{
				if(n<2)
				{
					len++;
					num_new.push_back(nums[i]);
				}
				n++;	
			}
			else
			{
				begin=nums[i];
				len++;
				num_new.push_back(nums[i]);
				n=1;
			}
		}
		nums=num_new;
        return len;
        
    }
};

方法二:

原地删除
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
         if(nums.size()<=2) return nums.size();
        int len=0;
        int n=0;
		int begin=nums[0];
		for(int i=1;i<nums.size();)
		{
			if(*(nums.begin()+i)==begin)
			{
				n++;
				if(n>1)
				{
				    nums.erase(nums.begin()+i);
				}
				else
					i++;
			}
			else
			{
				begin=*(nums.begin()+i);
			    i++;
			    n=0;
			}	

		}
		return nums.size();
    }
};


方法三:

因为已经是排好序的,重复元素均在一起,所以我们统计元素个数的时候,只统计重复两次以下的元素就行,当重复两次,也就是位置相差为2,且两个值还相等,我们就不统计即可。代码如下:
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
          if(nums.size()<=2) return nums.size();
        int rear=1;
		for(int i=2;i<nums.size();i++)
		{
			if(!(nums[i]==nums[rear]&&nums[i]==nums[rear-1]))
				nums[++rear]=nums[i];

		}
		return rear+1;
    }
};



Remove Duplicates from Sorted Array II

标签:

原文地址:http://blog.csdn.net/sinat_24520925/article/details/46627937

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!