leetcode26. Remove Duplicates from Sorted Array

链接

link

python

刚开始一看到题目,简直不要太开心。这不就是用集合处理一下就能去除重复元素吗?但是忘记集合是无序的。。。所以序列的元素不是按照原来的顺序排列的。不过再重新排一下就好啦~

第一版

class Solution:
    def removeDuplicates(self, nums) :
        
        a = set(nums)
        b = len(a)
        nums.clear()
        for i in a:
            nums.append(i)
        return b

第二版

记录数组的长度,然后@!#¥¥(懒得写了
注意后面不要的切片要删除

class Solution:
    def removeDuplicates(self, nums) :
        len_ = 1
        for i in range(1, len(nums)):
            if nums[i] != nums[i-1]:
                nums[len_] = nums[i]
                len_ += 1
        nums[len_:] = []        
        return len_
       

第三版

直接删除元素
注意这里的数组长度一直在变化,所以要用len()

class Solution:
    def removeDuplicates(self, nums) :
        i = 0
        # 当还没到倒数第一个元素的时候
        while i < len(nums) - 1:
            if nums[i] == nums[i+1]:
                del nums[i]
            else:
                i += 1
        return  len(nums)

第四版

双指针版
感觉像是在原有数组里面写新数组
当然必须有序才能这样写

class Solution:
    def removeDuplicates(self, nums) :
        slow = 0
        for fast in range(1, len(nums)):
            if nums[slow] == nums[fast]:
                fast += 1
            else:
                slow += 1
                nums[slow] = nums[fast]
                fast += 1
        return slow + 1

c

貌似不能用c来写?oj会给一个数组,但是不知道数组的长度啊,这一点不知道怎么解决QAQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值