题目:
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
, find the one that is missing from the array.
Example 1:
Input: [3,0,1]
Output: 2
Example 2:
Input: [9,6,4,2,3,5,7,0,1]
Output: 8
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
给定一个包含n个不同数字的数组,取自0,1,2,...,n,找到数组中缺少的数字。
例1:
输入:[3,0,1]
输出:2
例2:
输入:[9,6,4,2,3,5,7,0,1]
输出:8
注意:
您的算法应该以线性运行时复杂性运行。 你能用恒定的额外空间复杂度来实现吗?
代码1:
class Solution:
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
res = 0
for i in nums:
if res != i:
return res
else:
res= res+1
return res
思路:先将list集排好序,list集中的数从0开始,依次递增1。只要将排好序list集中的数和0,1,2,3,4...n相比较,直到找出不一样的,即为匹配到的缺少的数字。
代码2:
class Solution:
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
temp_sum = len(nums)*(len(nums)+1)/2
t_sum = sum(nums)
return int(temp_sum - t_sum)
思路:有序的list集合缺少了一位数,这个数可以借助等差数列求和进行。若不缺少这位数,可求出整个集合的和,再减去list集合本身的和,就为缺少的这个数的值。
代码3:
class Solution:
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = 0
for i in range(len(nums)+1):
res ^= i
for num in nums:
res ^= num
return res
思路:将nums中的数值依次与range(len(nums)+1)相异或。相同数异或为0,0与数异或还是这个数。就能够得到这个数。
代码4:
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for i in range(0,len(nums)):
if i not in nums:
return i
return len(nums)