概述
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只出现一次的数字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复