删除有序数组中的重复项

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

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

 

使用双指针法,因为数据已经是排序的,可以使用两个指着:快指针和慢指针,将重复的元素放到数组的末尾,只保留不重复的元素。

具体而言,可以将慢指针指向数组的开头,快指针指向数组的第二个元素。如果两个元素指向的元素相等,则将快指针向前移动一位,否则,将慢指针向前移动一位,并将其所指向的元素替换为快指针所指向的元素。

 

// 删除重复出现的元素
// 使每个元素只出现一次
class Solution 
{
public:
    int removeDuplicates(vector<int>& nums) 
    {
       
        if(nums.empty())    return 0;    // 如果数组为空,返回0
        int low = 0;           // 慢指针指向数组开头
        // 快指针指向数组第二个元素
        for(int fast = 1; fast < nums.size(); fast++)
        {
            if(nums[fast] != nums[low])     // 如果两个指针指向的元素不相等
            {
                low++;
                nums[low] = nums[fast]; // 将慢指针指向的的元素替换为快指针指向的元素
            } 
        }

        return low + 1;
    }
};

  

posted @ 2023-06-01 12:59  颖风船  阅读(26)  评论(0)    收藏  举报