剑指offer学习笔记:53 - II. 0~n-1中缺失的数字

题目

在这里插入图片描述

解法

见到排序数组的题目,应该首先想到二分法,原因有三:
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值