Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array A = [1,1,1,2,2,3]
,
Your function should return length = 5
, and A is now [1,1,2,2,3]
.
原始思路:
找一个标签数字,遍历向量元素,如果相等,则加1, 如果大于2,则continue遍历,如果不同 标签数字换成新的数字
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> a = { 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4,4 };
int k = 0;
int key = a[0];
int index = 0;
int i = 0;
while (i < a.size())
{
if (a[i] == key)
{
k++;
if (k<3)
a[index++] = key;
else
{
i++;
continue;
}
}
else
{
key = a[i];
a[index++] = key;
k = 1;
}
i++;
}
for (int i = 0; i < a.size(); i++)
cout << a[i] << endl;
system("pause");
return 0;
}
应为允许一个重复,所以判断就不是相邻而是相隔一个的数字是否不一样。
不一样就需要更新值,但注意到这题更新数组不能是当前的状态,而需要是更新前一个不同的数,用temp存当前值以便于下一次赋值。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> a = { 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4,4 };
int k = 0;
/*int key = a[0];
int index = 0;
int i = 0;
while (i < a.size())
{
if (a[i] == key)
{
k++;
if (k<3)
a[index++] = key;
else
{
i++;
continue;
}
}
else
{
key = a[i];
a[index++] = key;
k = 1;
}
i++;
}
*/
int num = 1, i, temp = a[1];
for (i = 2; i<a.size(); ++i)
if (a[i] != a[i - 2])
{
a[num++] = temp;
temp = a[i];
}
a[num++] = temp;
for (int i = 0; i < a.size(); i++)
cout << a[i] << endl;
system("pause");
return 0;
}