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; }