使用数组的两个下标。 这个类似链表的两个指针。
1. 有序数组去重 时间复杂度为O(n)
int removeDuplicate(int A[]){
int i=o;
int j;
int n=A.length();
if(n<=1) return n;
for (j=1;j<n;j++){
if(A[j] != A[i]){
A[++i]=A[j];
}
}
return i+1;
}
2. 三数之和。
给出一个整型数组,找出三个元素的组合,其组合之和等于0,要求在结果集里面不能有重复的组合。
if (num.lenght())<3 ) return resSet;
Arrays.sort(num);
for(int i=0;i<num.length-2;i++){
if(num[i]>0) break;
if(i>0 && num[i] == num[i-1] continue;
int start=i+1;end =num.length-1;
while(start<end){
int sum=num[i] =num[start] +num[end];
if(sum<0){
start++;
} else if (sum>0){
end--;
}else{
res=new();
res.add(num[i]);
res.add(num(start]);
res.add(num[end]);
resSet.add(res);
do{start++; } while(start<end && num[start]== num[start-1]);
do{end--;} while(start<end && num[end]==num[end+1]);
}
}
}
return resSet.