当前位置:网站首页>每日一题-删除有序数组的重复项

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

2022-06-11 21:36:00 爱学代码的学生

题目描述:

给你一个 升序排列的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。元素的相对顺序应该保持 一致 。

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。

将最终结果插入 nums 的前 k 个位置后返回 k 。

不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

题目分析:

对于此题我们可以利用双指针法来进行,定义fast和slow两个指针,如果数组arr[fast]!=arr[fast-1]则说明fast是不重复项的界限,则可以将其值赋值。

代码如下:

int removeDuplicates(int* nums, int numsSize){
        
       //从1开始是因为下标为0的元素是不用删除的
       int fast=1,slow=1;
       while(fast<numsSize){
        
        if(nums[fast]!=nums[fast-1]){
            nums[slow]=nums[fast];
            slow++;
           }
           fast++;
        }
       return size;  
}

原网站

版权声明
本文为[爱学代码的学生]所创,转载请带上原文链接,感谢
https://blog.csdn.net/rinki123456/article/details/123698796