数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项

数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第1张图片数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第2张图片

题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array

 解题方法:双指针

令定义src和dest指针,让dest指向第一个元素,src指向第二个元素,让src和src-1比较,当src和src-1不相等时,将src-1赋值给dest

数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第3张图片

当src==src-1时,src++

数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第4张图片

当src!=src-1时,dest=src-1,dest++,src++

 数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第5张图片

当src==src-1,一直都是src++ 

数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第6张图片

当src!=src-1时,dest=src-1,dest++,src++

数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第7张图片

当src==src-1时,src++

数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第8张图片

 当src!=src-1时,dest=src-1,dest++,src++

数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第9张图片

 当src==src-1时,src++

数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第10张图片

  当src!=src-1时,dest=src-1,dest++,src++

数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第11张图片

当src==numsSize,循环结束,但是无论src与src-1是否相等,都需要将最后一个src赋值给dest,由于使用dest,所以dest还必须自增,但是src不用

数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第12张图片

PS:当src与src-1相等时的情况

数据结构初阶之顺序表数组OJ题二——删除有序数组中的重复项_第13张图片

此时,src已经越界,无论是否src与src-1,最后一个元素3都应该赋值过去,与上面src不等于src-1

代码如下:

//双指针解题
int removeDuplicates(int* nums, int numsSize) {
    int dest = 0;
    int src = 1;
    while (src < numsSize)
    {
        //如果src等于src-1,则src一直往后走到与src-1不同,跳过区间里相同的元素
        if (nums[src - 1] == nums[src])
        {
            src++;
        }
        //当src与src不相等时,把src-1给dest
        else
        {
            nums[dest] = nums[src - 1];
            dest++;
            src++;
        }
    }

    //最后一个元素与src-1无论是否相等都需要直接给dest
    nums[dest] = nums[numsSize - 1];
    dest++;

    //返回长度
    return dest;
}

你可能感兴趣的:(#,初级数据结构,#,练习题,#,C语言,数据结构,c语言)