python实现leetcode-第26题-删除排序数组中的重复项

class Solution:
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        i = 0
        while i+1 < len(nums):
            if nums[i] == nums[i+1]:
                del nums[i+1]
            else:
                i = i+1
        return len(nums)
             

思想:比较当前与下一个的值,若相等,则删除下一个,若不等,则将下一个视为当前值,重复此过程。

注意:

while的用法

list的性质

nums(max)中的max等于len-1,即是从nums[0]作为第一项。

 print(" %s " % s) 的用法

删除List的方法

官方题解:

方法:双指针法

算法

数组完成排序后,我们可以放置两个指针 i 和 j,其中 i 是慢指针,而 j 是快指针。只要 nums[i] = nums[j],我们就增加 j 以跳过重复项。

当我们遇到 nums[j] ≠nums [i] 时,跳过重复项的运行已经结束,因此我们把Nums[j]的值复制到 nums[i + 1]。然后递增 i,接着我们将再次重复相同的过程,直到 j 到达数组的末尾为止。

这道题必须要搞清楚的是这里函数调用传递的数组是引用传递而不是值传递。

由于数组是可以直接用游标来当指针,所以刚开始我们定义的两个快慢指针指向同一个地址

复杂度分析

  • 时间复杂度:O(n), 假设数组的长度是 n,那么 i 和 j 分别最多遍历 n 步。

  • 空间复杂度:O(1)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值