LeetCode只出现一次的数字

LeetCode只出现一次的数字

题目:找出列表中只存在一次的数字
解法:4种
推荐:方法4
语言:python

题目介绍如下:
只出现一次的数字

题目通俗说明:

给定一个没有顺序的列表,其中的元素是成对出现,唯独有一个数字单独出现,要求找出此单独出现的数字

解法如下:

# author:铁臂阿童木

# datetime:2022/1/27 8:58

# software: PyCharm


# 题目:找出列表中只存在一次的数字
# 解法:4种
# 推荐:方法4


# 先定义两个条件列表
nums1 = [1,1,2]
nums2 = [1,2,1,3,2]


# 序号:方法一
# 方法:循环计数法
# 思想:对列表进行一次循环,对每个元素计数,将一次的元素返回
# 优点:
# 缺点:耗时(列表中只有1个元素出现一次,所有进行了很多次重复元素的计数)
def singleNumber(nums):
    i = 0
    n = len(nums)
    while (i < n):    # 进行i次循环
        count = nums.count(nums[i])     # 对每个元素进行计数
        if(count == 1):
            return nums[i]              # 返回计数等于1的元素
        else:
            i += 1

# print(singleNumber(nums2))


# 序号:方法二
# 方法:排序后元素对比法
# 思想:先进行排序,之后对循环中对前后两个元素进行比对,若不相等直接返回该元素
# 优点:
# 缺点:耗时
def singleNumber2(nums):
    i = 0
    n = len(nums)
    nums.sort()            # 对列表排序
    while (i < n):
        if(i == n-1):                 # 如果为最后一个元素,说明它就只有一个,直接返回它即可
            return nums[-1]
        else:
            if(nums[i] != nums[i+1]): # 如果前后两个元素不相等,说明前面这个元素一定是单独存在的,直接返回它
                return nums[i]
            else:
                i += 2                # 如果前后两个元素相等即成对出现,则循环向后走两位去找下一对

# print(singleNumber2(nums2))


# 序号:方法三
# 方法:删除重复元素法
# 思想:对列表头的元素进行存储后再删除,在剩余列表中找与其相同的值,找到就将其也删除,找不到就直接返回存储的变量
# 优点:超级省内存
# 缺点:频繁删除超级耗时
def singleNumber3(nums):
    i = 0
    n = len(nums)
    while (i < n):    # 进行n次循环
        if(n == 1):   # 如果列表只有一个元素,直接把元素返回
            return nums[0]
        else:         # 如果列表不止一个元素
            temp = nums[0]     # 将第一个元素赋值给承载变量
            nums.remove(nums[0])    # 删除第一个元素
            if temp not in nums:    # 在列表中找其是否有相等的元素
                return temp         # 没有直接返回承载变量的值
            else:
                nums.remove(temp)   # 如果有就将其删除

# print(singleNumber3(nums2))


# 序号:方法四
# 方法:元素异或法
# 思想:循环将所有元素进行异或运算,相同的数异或的结果为0,最终剩余的就是单独元素的值
# 优点:省内存,超级省时间
# 缺点:不容易理解
def singleNumber4(nums):
    flag = 0         # 定义一个异或的起始值  (任何数与0异或都等于其本身)
    for num in nums:
        flag = flag ^ num   # 循环进行异或运算
    return flag             # 最终得到的值就是列表中单独的元素

# print(singleNumber4(nums2))

经验:

如果自己编写中出现错误,就针对简单示例数据进行测试,使用编译器的调试工具打断点测试!

感谢阅读!!!
有错误请您指出!!!
欢迎补充!!!

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值