題目描述:有序數組去重,允許重複次數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;
}