8.6 面试算法题

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 //返回新数组的长度
    
}

猜你喜欢

转载自www.cnblogs.com/rise0111/p/11309879.html
8.6