题目
解法
见到排序数组的题目,应该首先想到二分法,原因有三:
1.二分法时间复杂度O(logn)优于直接遍历O(n)
2.有的题目你会发现我直接遍历非常简单就可以得到结果,比如该题遍历的过程中判断nums[i]是不是等于i就可以了。但是题目中排序的条件都没有用上,肯定没有get到出题者的意图。
3.如果面试中出现这种排序数组,肯定是想考察二分法,如果还用遍历法对于面试肯定是很难堪的。
class Solution:
def missingNumber(self, nums: List[int]) -> int:
left = 0
right = len(nums)-1
while left <= right:
mid = (left + right) //2
if nums[mid] == mid: #说明前面都是全的,缺失的在后面
left = mid+1
elif nums[mid] != mid: #说明前面有缺失的,缺失的在前面
right = mid-1
return left