Leetcode No.80 Remove Duplicates from Sorted Array II

来源:互联网 发布:在线大模考的软件 编辑:程序博客网 时间:2024/06/05 17:14

Question:

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.

Solution:这题比较简单,因为不考虑不重复数组的后面的内容,只需在遍历数组时重置数组前面的内容即可

C++ Codes:

法一:设一个标志分别代表有1,2,3个重复元素
<pre name="code" class="cpp">class Solution{public:    int removeDuplicates(vector<int>& nums)    {        int flag=1,len=0;        for(int i=1;i<nums.size();++i)        {            if(nums[i]==nums[i-1]&&flag==1)//第二个重复元素,赋进向量            {                nums[++len]=nums[i];                flag=2;            }            else if(nums[i]==nums[i-1]&&flag==2)//第三个重复元素            {                flag=3;            }            else if(nums[i]!=nums[i-1])//新元素,flag置为0            {                flag=1;                nums[++len]=nums[i];            }        }        return (nums.size()==0)?len:len+1; //判断是否为空向量    }};

法二:转载自leetcode大神,非常精妙!
<pre name="code" class="cpp">class Solution{public:int removeDuplicates(vector<int>& nums) {int i = 0;for (int n : nums){if (i < 2 || n > nums[i-2])//保留了前两个数{nums[i++] = n;}}return i;}}


</pre><pre name="code" class="cpp">


0 0