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]
.
//来源于soulmachine:
//1.双指针一个for内解决; 2.表象是去重,实质上是把题目要求的元素归入新数组
// index
//[ 1, 1, 1, 1, 1, 1, 2, 2, 2, 3]
// i
public class Solution {
public int removeDuplicates(int[] A) {
if (A.length<=2)
return A.length;
int index=2;//第一个指针定义在for外,用来表征新Array长度,也是新Array的index
for(int i=2;i<A.length;i++){//第二个指针定义在for内,指向待验证是否相同的元素
if(A[i]!=A[index-2])
A[index++]=A[i];//先覆盖重复元素,后index++;
}
return index;//截取in-place新Array
}
}
注:1.时间复杂度O(n),空间复杂度O(1)
2.上面code扩展性较好