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?
题意:给一个数组,包含n个不同的数,从0,1,2,.......,n取得。找到数组中没有出现的那个数。
例如:给数组nums=[0,1,3]返回2
注意:要求线性运行时间,即O(n),使用常数个变量
思路:1,我以前好像写过一道题,具体是哪个忘了。。。。但是那道题的思路可以拿到这个题中来用,思想是把数组的下标作为一个记录,将数组中出现的值当作索引位置,将该索引下标的位置的数该为0,依次遍历一遍,最后不是0的那个数的下标就是数组中没有出现的数。这个思路相对复杂些。
2,这道题有个更简单的思路,利用位运算的特性。相同数的异或运算为0,所以呢,取0~n的数与数组中的数异或,数组中没有出现的那个数,就是异或后得到的值。
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
length = len(nums)
missNum = 0
for i in range(length):
missNum = missNum^nums[i]^i
return missNum^length