https://oj.leetcode.com/problems/remove-duplicates-from-sorted-array-ii/
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].
这一题和Remove Duplicate from Sorted Array其实没有本质的不同,都是依赖快慢指针实现,只是这一题需要再加一个当前数值的计数器,当超过2的时候慢指针就不再前进了。难度不高,时间O(N) 空间O(1)
public int removeDuplicates(int[] A) {
if(A.length == 0)
return 0;
int curval = A[0];
int cur_counter = 1;
int counter = 1;
for(int i = 1; i < A.length; i++){
if(A[i] == curval){
cur_counter++;
counter = cur_counter <= 2 ? counter + 1 : counter;
}else{
curval = A[i];
counter++;
cur_counter = 1;
}
A[counter - 1] = curval;//虽然每次都在赋值,但实际上当cur_counter > 2的时候counter维持原地,这样写只是为了代码看起来更简洁。
}
return counter;
}
本文介绍了一种在有序数组中允许元素最多重复两次的情况下,去除多余重复元素的方法。使用快慢指针技术,并增加了一个计数器来跟踪当前元素出现次数。此算法简单高效,时间复杂度为O(N),空间复杂度为O(1)。
109

被折叠的 条评论
为什么被折叠?



