Python_算法_去重重复数字

1. 描述

在面试某大厂的时候遇到一个笔试题目,题目内容为:给定一个列表,去除重复的数字(自身也不保留),例如 [1, 2, 2, 3, 4],处理后为 [1, 3, 4]。

2. 解题

用例输入:nums = [1, 2, 3, 3, 3, 4, 4, 5, 6, 6, 7]
用例输出:nums = [1, 2, 5, 7]

2.1 暴力求解

看到题目的想到一种解法就是对每一个数字进行计数,最后只留出现次数为1的数字。但是这种方法的算法复杂度很好,在面试的时候并没有提到,在整理的时候梳理一下。

nums = [1, 2, 3, 3, 3, 4, 4, 5, 6, 6, 7]

count_nums = [nums.count(i) for i in nums]
res_nums = []
for i in range(len(nums)):
    if count_nums[i] == 1:
        res_nums.append(nums[i])

2.2 哈希查找

这道题目可以利用哈希查找进行解题,有点类似两数求和,具体流程为:

  1. 建立重复数列表和输出列表,此处命名为rep_nums和res_nums
  2. 对nums中执行遍历,都每一个数执行:
  3. 先查找是否在rep_nums中,如果在直接结束;如果不在判断是否在res_nums中,如果不在加入;如果在移除并添加到rep_nums中

评价:这种方法适用于无序数组,可以自行更新尝试。

nums = [1, 2, 3, 3, 3, 4, 4, 5, 6, 6, 7]

rep_nums = []
res_nums = []

for i in nums:
    # 首先判断是否在重复数组中,若存在直接break
    if i in rep_nums:
        continue
    
    # 其次判断是否在结果数组中,若存在则从结果数组中移除并在重复数组中添加
    if i in res_nums:
        res_nums.remove(i)
        rep_nums.append(i)
    else:
        res_nums.append(i)

print(res_nums)

变体:如果说明给定数组为有序,可以有一些更为奇妙的方法。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值