1 要求: 对一个有序数组进行去重 并返回去重后数组的长度
算法原理:
要求不能开拓新的空间,所以采用双指针的方式遍历
使用两个下标i和j去遍历,其中i记录去重后所得新数组最后一个元素的位置,j用来遍历整个数组,i和j通向移动,
- j先移动,当j所在位置元素与i所在位置元素一致时,i不动
- 不一致时 i+=1 将j所在位置元素值拷贝到i所在位置
int removeDuplicates(int A[]){
int i = 0; //第一个指针
int j;// 第二个指针
int n = A.length;
if(n <= 1) return n;
for(j = 1; j < n;j++){
if(A[j]!=A[i]){ // 若两个指针所指元素不同,则i+1位置保存j所指元素的值
A[++i] = A[j]
}
}
return i+1 //返回新数组的长度
}