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

题目描述

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

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

解法

1. 普通解法

就是把相邻之间重复的元素进行删除,然后输出结果

int removeDuplicates(vector<int>& nums) {
        int count=nums.size();
        for(int i=0;i<count-1;i++){
            if(nums[i]==nums[i+1]){
                for(int j=i+1;j<count-1;j++)
                    {nums[j]=nums[j+1];}
                    count--;
                    i--;
            }
        }
        return count;
    }
2. 双指针

可以建立两个指针,分别是快慢指针:快指针顺序遍历数组,慢指针指向没有重复的元素上:

int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if (n == 0) {
            return 0;
        }
        int fast = 1, slow = 1;
        while (fast < n) {
            if (nums[fast] != nums[fast - 1]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }

留下评论