快慢指针--删除有序数组中的重复项

Posted 4nc414g0n

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快慢指针--删除有序数组中的重复项相关的知识,希望对你有一定的参考价值。

问题

力扣链接

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

分析:

  1. 定义两个标志,由于是有序数组,当快指针每次加一并和慢指针指向的数组元素比较相同就继续加一,不相同就把值付给慢指针指向的数组元素,快慢指针同时加一

代码如下:

int removeDuplicates(int* nums, int numsSize){
    int fast=1;
    int slow=0;
    if(numsSize==0)
    {
        return numsSize;
    }
    while(fast<numsSize)
    {
        if(nums[fast]==nums[slow])
        {
            fast++;
        }
        else{
            slow++;
            nums[slow]=nums[fast];
            fast++;
        }
    }
    return slow+1;
}

以上是关于快慢指针--删除有序数组中的重复项的主要内容,如果未能解决你的问题,请参考以下文章

26. 删除有序数组中的重复项(先后指针)

26. 删除有序数组中的重复项(先后指针)

26. 删除有序数组中的重复项(先后指针)

LeetCode 80. 删除有序数组中的重复项 II 双指针

LeetCode算法小抄--数组

最小栈(栈设计)删除有序数组中的重复项(数组双指针)最大数(贪心字符串)