[LeetCode]Missing Number

题目描述:

Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.

For example,
Given nums = [0, 1, 3] return 2.

Note:

Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?

题目大意:

给定一个包含从0, 1, 2, ..., n, 选出的n个不同数字的数组,从中找出数组中缺失的那一个数。

例如,
给定 nums = [0, 1, 3] 返回2。

注意:

你的算法应该满足线性时间复杂度。你可以只使用常数空间复杂度完成此题吗?

解题思路:

解法I:等差数列前n项和 - 数组之和

Python代码:

class Solution(object):
    def missingNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        return n * (n + 1) / 2 - sum(nums)

解法II:位运算(异或运算)

Python代码:

class Solution(object):
    def missingNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        a = reduce(operator.xor, nums)
        b = reduce(operator.xor, range(len(nums) + 1))
        return a ^ b

本文链接:http://bookshadow.com/weblog/2015/08/24/leetcode-missing-number/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。

如果您喜欢这篇博文,欢迎您捐赠书影博客: ,查看支付宝二维码

Pingbacks已关闭。

评论
  1. _Astray_ _Astray_ 发布于 2015年8月24日 20:24 #

    很好的博客每天都更新

  2. 在线疯狂 在线疯狂 发布于 2015年8月25日 11:23 #

    欢迎常来看看 :)

  3. traceformula.blogspot.com traceformula.blogspot.com 发布于 2015年9月2日 14:51 #

    My python:
    class Solution(object):
    def missingNumber(self, nums):
    r = 0
    for i in range(len(nums)):
    r ^= i ^ nums[i]
    return r ^ len(nums)
    URL: http://traceformula.blogspot.com/2015/09/missing-number-leetcode.html

  4. okwap okwap 发布于 2015年9月13日 12:52 #

    為何是用n * (n + 1) / 2 而不是 https://upload.wikimedia.org/math/2/0/a/20a19b4e5511d45a905b0405b44ddfc8.png ?

  5. 在线疯狂 在线疯狂 发布于 2015年9月13日 17:32 #

    首项a1 = 1,末项an = n,公差d = 1,项数为n

  6. okwap okwap 发布于 2015年9月13日 22:20 #

    這我知道,但我不瞭解的是,這個公式為何可以套用在首項不為1的Given nums = [0,1,3]

  7. 在线疯狂 在线疯狂 发布于 2015年9月13日 23:49 #

    题意是说从0 - n这n+1个数中找出缺失的那1个,如果把首项看作0,末项,公差不变,项数变成n+1,结果依然是n*(n+1)/2

  8. okwap okwap 发布于 2015年9月14日 09:29 #

    懂,感謝指導!

张贴您的评论