题目地址:
https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/
给定一个长
n
n
n的数组
A
A
A,重复的元素只保留两个,要求返回去重后的数组长度,并且原地去重。
维护一个合法的前缀,每次枚举 A [ i ] A[i] A[i]的时候,看一下 A [ i ] A[i] A[i]在这个前缀里出现了多少次,如果出现次数小于 2 2 2就加进去,否则略过。代码如下:
class Solution {
public:
int removeDuplicates(vector<int>& A) {
int j = 0;
for (int i = 0; i < A.size(); i++) {
if (j < 2 || A[i] > A[j - 1] || A[i] > A[j - 2]) A[j++] = A[i];
}
return j;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。