!!!leetcode第一次Accepted!!!
虽然感觉这句话暴露自己的智商,但是没办法,就是比较笨了~~~
虽然超级简单!几个简单的if语句搞定,还是阻挡不住我看到Accepted时的开心啊~
有第一次绿色 就有不断的绿灯 哈哈哈哈
#268. Missing Number
题目 :Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
, find the one that is missing from the array
class Solution:
def missingNumber(self, nums):
nums = sorted(nums)
if len(nums) == 1 and nums[0] == 0 :
return 1
elif len(nums) == 1 :
return nums[0]-1
elif nums[0] != 0:
return 0
else:
for i in range(len(nums)-1):
if nums[i+1] - nums[i] != 1:
#print(nums)
#print("##",i,nums[i+1] - nums[i] )
return (nums[i]+1)
return (nums[len(nums)-1]+1)
自己的代码太low了 等我看下大牛们是如何实现的 明天补上后续学习大牛解法的博文
续更 leetcode 上的solution 版块
Approch #2 HashSet
set()方法去除重复值后,假设nums长度为 n,则nums应该包含 0-n所有的值,不包括的则为missing
#hashset
class Solution:
def missingNumber(self, nums):
nums_set = set(nums)
for i in range(len(nums) + 1):
if i not in nums_set:
return i
Approch #3 Bit Manipulation
bit manipulation 位运算
运用XOR(异或),假设nums长为n,用 n XOR(value XOR index)
【补充 】
异或运算法则
(1) a ^ b = b ^ a
(2) a ^ b ^ c = a ^ ( b^c) =(a^b)^c
(3)d= a ^ b ^ c ——>a= d^ b ^ c
(4) a^b^a = b
相同为0,相异为1,0异或任何数为任何数自身
a^a=0,0^n=n
index^value = missing number and n(value)
n ^(index ^value) = n ^ missing number ^n = missing number
#位运算
class Solution:
def missingNumber(self, nums):
missing = len(nums) #用nums长度去异或
for i,v in enumerate(nums):
missing ^= i^v #不用管nums是否按大小排序 循环依次异或 因为a^b^c =c^b^a
return missing
Approach $4 Gauss'Fomular
利用高斯公式求得 0-n 的总和,减去实际nums总和,既得缺失值~~
nice!这个方法好巧秒,自己还是定性思维~
Gauss'Formula =
#Gauss'Formula
class Solution:
def missingNumber(self, nums):
n = len(nums)
return n*(n+1)//2 - sum(nums) # //是向下取整,如果是 / 得到小数
3.15的题 3.23才看完大牛解法... 拖延症患者飘走~~