day 9 删除排序数据中的重复项

本文探讨了一种去除数组中重复元素的算法思路,通过对比冒泡排序方法,作者逐步理解并实现了一个虽效率不高但能解决问题的方案。在过程中,作者发现了审题不清和指针应用不熟练的问题,并进行了深刻反思。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己的想法

首先想到的是类似于数字排序的冒泡排序方法,即:先将i与i+1位置的数据比较,如果相同,将i+1处数据放到i+2处:然后将i+1与i+2进行比较,如果相同放到下一个位置,以此类推。
然后仔细一想,不对啊。。。这样只能保证数组中所有相邻数字都不同,但是不能保证所有不同项都能在最前面。。。

看官方题解后

看了官方说明的文字描述,就感觉自己立马顿悟了。。。然后自己码了以下,也成功的写出来了,虽然说显然速度和内存占用都表现不好。

反思

问题一:审题不清,题上说明了处最前端按要求排列元素之后的所有元素都可任意变。而我总是在想将前面找到的元素还要对应的放到后面去。
问题二:对指针的应用不熟练,甚至开始的时候就没有往这边想。还是要加强编程的联系,然后认真看看算法书,还没仔细看过。。。

下面是自己写的代码:

class Solution:
    def removeDuplicates(self, nums) :
        k = 1
        i = 0
        if len(nums) < 2:
            return len(nums)
        while i<len(nums):
            j = i+1
            while j<len(nums):
                if nums[i] == nums[j]:
                    j += 1
                else:
                    break
            if j < len(nums):   
                nums[k] = nums[j]
                k += 1
                i = j
            else:
                break
        return k
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值