您的位置:首页 > 其它

2018.03.15 leetcode 打卡 #268. Missing Number

2018-03-15 23:55 351 查看
!!!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)
【[b]补充 】[/b]
  异或运算法则   
(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 missingApproach $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才看完大牛解法...

  拖延症患者飘走~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: