力扣---LeetCode26. 删除有序数组中的重复项


前言

努力从今天开始成功从零开始 只要你还愿意努力世界就会给你惊喜
本章的内容是力扣每日随机一题的部分方法的解析


提示:以下是本篇文章正文内容,下面案例可供参考

26. 删除有序数组中的重复项

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。
    在这里插入图片描述

链接

  1. 删除有序数组中的重复项题链接link

方法一:三指针

时间复杂度O(N)
空间复杂度O(1)

int removeDuplicates(int* nums, int numsSize)
{
    
    
    int src1=0;
    int src2=1;
    int dest=0;
    while(src2<numsSize)
    {
    
    
        if(nums[src1]!=nums[src2])
        {
    
    
            nums[dest++]=nums[src1];
            src1=src2;
            src2++;
        }
        else
        {
    
    
            src2++;
        }
    }
    nums[dest++]=nums[src1];
    return dest;
}

在这里插入图片描述

方法二:双指针

时间复杂度O(N)
空间复杂度O(1)

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

在这里插入图片描述


总结

Ending,今天的力扣每日一题内容就到此结束啦,如果后续想了解更多,就请关注我吧,一键三连,还有许多种方法没有写出希望各位佬补充哦~

猜你喜欢

转载自blog.csdn.net/ljq_up/article/details/130293540
今日推荐