LeetCode:136. 只出现一次的数字(python3,JavaScript)
Posted 南岸青栀*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:136. 只出现一次的数字(python3,JavaScript)相关的知识,希望对你有一定的参考价值。
文章目录
136. 只出现一次的数字
python3
法1:建立两个表一个用来记录值,一个用来记录出现次数
class Solution:
def singleNumber(self, nums: List[int]) -> int:
key,value = [],[]
for n in nums:
if n in key:
value[key.index(n)] += 1
else:
key.append(n)
value.append(1)
print(key,value)
return key[value.index(1)]
优化一下:使用字典
class Solution:
def singleNumber(self, nums: List[int]) -> int:
dic = {}
for n in nums:
if n in dic:
dic[n] += 1
else:
dic[n] = 1
key = list(dic.keys())
value = list(dic.values())
return key[value.index(1)]
法3:先排序,然后遍历查看单个数字
class Solution:
def singleNumber(self, nums: List[int]) -> int:
#先排序后比较只有一个出现的
if len(nums) == 1:
return nums[0]
nums.sort()
for i in range(1,len(nums),2):
if nums[i] != nums[i-1]:
return nums[i-1]
if (i + 2) == len(nums):
return nums[-1]
法4:异或
进阶:不使用额外的空间
class Solution:
def singleNumber(self, nums: List[int]) -> int:
#异或
res = 0
for n in nums:
res ^= n
return res
借助reduce()函数
class Solution:
def singleNumber(self, nums: List[int]) -> int:
#异或
return reduce(lambda x,y:x^y,nums)
补充
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
javascript
位运算
var singleNumber = function(nums) {
let res = 0
for(let i=0;i<nums.length;i++){
res ^= nums[i]
}
return res
};
以上是关于LeetCode:136. 只出现一次的数字(python3,JavaScript)的主要内容,如果未能解决你的问题,请参考以下文章