我是靠谱客的博主 纯情花生,最近开发中收集的这篇文章主要介绍LeetCode只出现一次的数字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))

经验:

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

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

在这里插入图片描述

最后

以上就是纯情花生为你收集整理的LeetCode只出现一次的数字LeetCode只出现一次的数字的全部内容,希望文章能够帮你解决LeetCode只出现一次的数字LeetCode只出现一次的数字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部