您的位置:首页 > 其它

leetcode Remove Duplicates from Sorted Array II

2014-09-13 21:27 405 查看
/*****************************************************************
created:    2014/09/13 16:16
filename:    remove-duplicates-from-sorted-array.cpp
author:        Justme0 (http://blog.csdn.net/justme0)

purpose:    有序数组中,有至少三个相同元素时删掉只留两个 https://oj.leetcode.com/problems/remove-duplicates-from-sorted-array-ii/ *****************************************************************/

#include <iostream>
#include <cassert>
#include <vector>
using namespace std;

class Solution {
public:
int removeDuplicates(int A[], int n) {
if (n <= 2) {
return n;
}

vector<int> iVec;
iVec.push_back(A[0]);
for (int i = 1; i < n - 1; ++i) {
if (!(A[i - 1] == A[i] && A[i] == A[i + 1])) {
iVec.push_back(A[i]);
}
}
iVec.push_back(A[n - 1]);

assert(iVec.size() <= unsigned(n));
for (unsigned i = 0; i < iVec.size(); ++i) {
A[i] = iVec[i];
}

return iVec.size();
}
};

class Solution2 {
public:
int removeDuplicates(int A[], int n) {
if (n <= 2) {
return n;
}

int len = 2;
for (int i = 2; i < n; ++i) {
if (A[i] != A[len - 2]) {
A[len] = A[i];
++len;
}
}
assert(len <= n);

return len;
}
};

int main(int argc, char **argv) {
int arr[] = {1, 1, 2, 2, 3};
int len = sizeof arr / sizeof *arr;
int new_len = Solution2().removeDuplicates(arr, len);
for (int i = 0; i < new_len; ++i) {
cout << arr[i] << endl;
}

system("PAUSE");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: