一、前言
如果放弃太早,你永远都不知道自己会错过什么。
每天五分钟,看懂一道简单、中等难度的算法题,尽可能将复杂的题讲清楚。
疯狂学习python中,2020-07-16更新

二、题目
一个长度为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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
三、解法思路
此题难度一般,由题意可知,这是一个从0~n-1的递增排序数组,在不缺失数值的情况下,那么该数组的值和索引是一一对应的。

根据题意,可知:
n
u
m
s
[
i
]
!
=
i
(
i
就
是
缺
失
的
元
素
)
nums[i] != i (i就是缺失的元素)
nums[i]!=i(i就是缺失的元素)
二分法查找
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dmBimfwi-1594867464863)(C:\Users\Administrator\Desktop\截图\2020-07\2020-07-16-10:13:56-18.png)]](https://i-blog.csdnimg.cn/blog_migrate/a60385dbe69e95b58af290adba80bc4a.png#pic_center)
四、代码实例
"""
二分法查找
"""
nums = [0, 1, 2, 4, 5, 6, 7, 8, 9]
class Solution:
def missingNumber(self, nums: List[int]) -> int:
i, j = 0, len(nums)-1
while i<=j:
m = (i+j)//2
if nums[m] == m:
i = m+1
else:
j = m-1
return i
if __name__ == '__main__':
result = Solution()
result.missingNumber(nums)

本文介绍了LeetCode面试题53-II,即找到一个长度为n-1的递增排序数组中缺失的0~n-1范围内的数字。通过示例和解题思路说明,使用二分法进行查找,最后给出Python实现代码。

1011

被折叠的 条评论
为什么被折叠?



