题目:
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,
Given input array A = [1,1,2],
Your function should return length = 2, and A is now [1,2].
思路1:
O(n),三个指针,next 指向下一个存储点,duplicate 和 i 用来检测重复
Code:
public int removeDuplicates(int[] A) {
if(A.length<=1) return A.length;
int next=0;
int length=A.length;
int duplicate=0;
for(int i=1;i<A.length;i++){
if(A[i]==A[duplicate]){
length--;
}else{
A[++next]=A[i];
duplicate=next;
}
}
return length;
}
思路2:
比较偷懒的做法,对于重复项赋最大值,然后Sort
Code:
public int removeDuplicates(int[] A) {
if(A.length==0) return 0;
if(A.length==1) return 1;
int j=0;
int length=A.length;
for(int i=1;i<A.length;i++){
if(A[i]!=A[j]){
j=i;
}else{
A[i]=Integer.MAX_VALUE;
length--;
}
}
Arrays.sort(A);
return length;
}
备注: