Python 基础算法——删除有序数组中的重复项

12. 删除有序数组中的重复项

给你一个升序排列的数组 nums,请你原地删除重复出现的元素,使每个元素只出现一次,

返回删除后数组的新长度。元素的相对顺序应该保持 一致 。然后返回nums中唯一元素的个数。

示例:

输入:nums = [1,1,2]
输出:2, nums = [1,2,_]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。

常用的算法分别是:函数法双指针法递归算法

函数法:(这个方法是错误的,本人也不清楚,有知道的评论区指教指教~)

函数法的思路:使用 set() 去重。

# 函数法    时间复杂度:O(n)    空间复杂度:O(1)
def remove_duplicates1(nums):
    return len((set(nums)))

双指针法:

双指针法的思路:利用了数组有序的特点,i, j 两个指针协同工作,实现空间 O(1) 的原地去重。

# 双指针法    时间复杂度:O(n)    空间复杂度:O(1)  
def remove_duplicates2(nums):
    i = 0
    for j in range(1, len(nums)):
        if nums[i] != nums[j]:
            i += 1
            nums[i] = nums[j]
    return i + 1

递归算法:(此算法也不算是合格,因为递归占据了系统占空间)

递归算法的思路:通过递归层层比较相邻元素,实现了整个数组的去重。

# 递归算法  时间复杂度:O(n)    空间复杂度:O(n)
def remove_duplicates3(nums):
    if not nums:
        raise Exception('数组中没有元素!')
    if len(nums) == 1:
        return 1
    
    i = 1
    while i < len(nums) and nums[i] == nums[0]:
        i += 1
    
    return 1 + remove_duplicates3(nums[i:])

题目来源:力扣 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值