Remove Duplicates from Sorted ArrayII---80---有序数组去重2

题目描述:有序数组去重,允许重复次数2
思路:同样采用快慢指针的方法,多增加一个count记录还有几次重复,初始值1
1 一开始快指针指向1,慢指针指向0
2 如果快慢指针对应值相等即重复,并且count为0,那么快指针走一步
3 否则:如果快慢指针对应值相等,即重复一次,那么count减1,否则,不重复,count恢复为1
此时,慢指针走一步,把快指针的值赋给慢指针,然后快指针走一步
返回慢指针+1

#include<iostream>
#include<vector>

 using namespace std;

 class Solution
 {
     public:
     int removeDuplicates2(int nums[],int n)
     {
         int fast = 1, slow = 0;
         int count = 1;
         if(n <= 2)
         {
            return n;
         }           
        
        while(fast < n)
        {
            if(nums[fast] == nums[slow] && count == 0)
                ++fast;
            else
            {
                if(nums[fast] == nums[slow])
                    --count;
                else 
                    count = 1;
                nums[++slow] = nums[fast++];
            }
        }
        return slow+1;
     }
 };

 int main()
 {
     Solution s;
     int v[]={1,1,1,2,2,3};
    // int data;
    // vector<int> v= {1,1,1,2,2,3};
   /*  while(cin >> data)
    {
        v.push_back(data);
    } */
     int length = s.removeDuplicates2(v,6);
     cout << length;
     return 0;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值