【LeetCode】80. Remove Duplicates from Sorted Array II 解题报告(Python)

本文介绍了一种在排序数组中去除重复元素的算法,确保每个元素最多出现两次,并保持原数组不变,通过两种方法实现,一种是移除重复项,另一种是覆盖重复项。

题目分析:

这一题是给定一个排序数组,你需要在原数组删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不能使用额外的数组空间,你必须在原数组修改输入数组并在使用 O(1) 额外空间的条件下完成。(不考虑数组中超出新长度后面的元素。)如:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。

解题思路:

一、我们可以使用while遍历整个数组,加一个标记计算当前元素出现的次数,如果大于等于3次就remove当前位置,见测试代码1。
二、我们也可不romove而是拿后面的值覆盖当前值,还要有一个变量记录不超过两个元素的个数,见测试代码2。

测试代码1:(Runtime: 144 ms, faster than 93.97%)

class Solution:
    def removeDuplicates(self, nums: list) -> int:
        i = 0
        while i < len(nums):
            flag = nums[i]
            count = 1
            j = i + 1
            while j < len(nums) and nums[j] == flag:
                count += 1
                j += 1
                if count >= 3:
                    nums.remove(nums[j - 1])
                    j -= 1
            i = j
        return len(nums)

print(Solution().removeDuplicates(nums = [1,1,1,2,2,3],))   #提交时请删除该行

测试代码2:(Runtime: 52 ms, faster than 64.00%)

class Solution:
    def removeDuplicates(self, nums: list) -> int:
        idx = 0
        for i in range(0, len(nums)):
            if idx < 2 or nums[i] != nums[idx - 2]:
                nums[idx] = nums[i]
                idx += 1
        return idx

print(Solution().removeDuplicates(nums = [1,1,1,2,2,3],))   #提交时请删除该行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值