每日一题——删除有序数组中的重复项

删除有序数组中的重复项

题目链接

每日一题——删除有序数组中的重复项_第1张图片


注:本题所采用的方法是建立在移除元素的基础之上的,如果大家对双指针的方法不大了解,或者不会做《移除元素》这一题,建议先去看看传送门

具体步骤

  • 定义两个指针slowfastslow指向数组的第一个元素,fast指向数组的第二个元素
  • fast开始向后遍历数组,如果其值等于slow所指向的元素,那么则说明出现重复元素,fast继续向后移动
  • 如果fast所指向的元素不等于slow的,那么进行操作[++slow] = [fast++],即先让slow向后移动一位再进行赋值操作,接着fast继续后移
  • 直到fast遍历完整个数组

如图所示:

每日一题——删除有序数组中的重复项_第2张图片


实现代码

int removeDuplicates(int* nums, int numsSize){
    int slow = 0;
    int fast = 1;
    while(fast < numsSize)
    {
        //相等就不赋值,fast继续遍历
        if(nums[fast] == nums[slow])
            fast++;

        //不相等就赋值
        else
            nums[++slow] = nums[fast++];
    }
    //返回新数组大小
    return slow + 1;
}

你可能感兴趣的:(每日一题,#,数组相关,算法,c语言,leetcode)