leetcode80-删除排序数组中的重复项2(c++/python)

题目

思路

首先从题干中找出关键信息:

  • 排序数组
  • 原地删除
  • 不使用额外的数组空间

本题和leetcode26类似(详情点击传送门),涉及数组元素的删除问题,依旧快慢指针的思路。不同的是,可以最多允许2个重复元素,因此,应检查快指针指向的元素和慢指针指针所指向单元的前一个元素是否相等。相等则不更新慢指针,只更新快指针;不相等时,先将慢指针后移一位,再将快指针指向的元素覆写入慢指针指向的单元,最后更新快指针。

详细如下图(图片来自[2])

img

img

img

img

img

题解

C++:

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

Python:

class Solution(object):
    def removeDuplicates(self, nums):
        n=len(nums)
        if(n<2):
            return n
        fast,slow=2,1
        while(fast<n):
            if(nums[fast]!=nums[slow-1]):
                slow+=1
                nums[slow]=nums[fast]
            fast+=1
        return slow+1

参考

  1. https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/
  2. https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii/solution/c-shuang-zhi-zhen-dan-ci-sao-miao-tu-jie-by-dexin/
posted @ 2020-03-11 22:53  depth-perception  阅读(135)  评论(0)    收藏  举报