2018.03.15 leetcode 打卡 #268. Missing Number

!!!leetcode第一次Accepted!!!

虽然感觉这句话暴露自己的智商,但是没办法,就是比较笨了~~~安静

虽然超级简单!几个简单的if语句搞定,还是阻挡不住我看到Accepted时的开心啊~大笑

有第一次绿色 就有不断的绿灯 哈哈哈哈

#268Missing 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才看完大牛解法...安静  拖延症患者飘走~~

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值