一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
示例 1:
输入: [0,1,3]
输出: 2
示例 2:
输入: [0,1,2,3,4,5,6,7,9]
输出: 8
限制:
1 <= 数组长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路1
根据求和差求解
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
return sum(range(len(nums)+1))-sum(nums)
执行结果:
通过
显示详情
执行用时 :40 ms, 在所有 Python 提交中击败了28.31%的用户
内存消耗 :13.2 MB, 在所有 Python 提交中击败了100.00%的用户
思路2
根据内置Counter求解
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
dict=Counter(nums)
for i in range(len(nums)+1):
if dict[i]==0:
return i
执行结果:
通过
显示详情
执行用时:60 ms, 在所有 Python 提交中击败了5.14%的用户
内存消耗:14.2 MB, 在所有 Python 提交中击败了100.00%的用户
思路3
二分法
class Solution(object):
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
low=0
high=len(nums)-1
while low<=high:
mid=(low+high)//2
if nums[mid]==mid:
low=mid+1
elif nums[mid]!=mid:
high=mid-1
return low
执行结果:
通过
显示详情
执行用时:28 ms, 在所有 Python 提交中击败了56.62%的用户
内存消耗:13.1 MB, 在所有 Python 提交中击败了100.00%的用户