leetcode刷题记录——二分简单题

35. 搜索插入位置

题源:搜索插入位置

刷题时间:20210908

二分查找的典型题,查找target元素,若查到返回索引,查不到返回插入位置索引。也就是返回第一个大于或等于target的位置。

def searchInsert(nums, target):
    left, right = 0, len(nums) 
    while left < right:
        m = left + (right - left) // 2 # 防止越界
        if nums[m] < target:
            left = m + 1
        else:
            right = m
    return left

69. x 的平方根

题源:x 的平方根

刷题时间:20210909

与35略有差距,返回最后一个其平方小于或等于x的数,因此二分收缩左边界。

def mySqrt(x):
    left, right = 0, x
    while left < right:
        mid = left + (right - left + 1) // 2 # 避免出现死循环
        if mid * mid <= x:
            left = mid
        else:
            right = mid - 1
    return left

367. 有效的完全平方数

题源:有效的完全平方数

刷题时间:20210909

查找其平方等于num的数,35题的简化,左右边界收缩都可。

def isPerfectSquare(num):
    left, right = 0, num
    while left < right: 
        mid = left + (right - left) // 2 # //表示整除
        if mid * mid < num: 
            left = mid + 1 
        else:
            right = mid # 收缩右边界
    return left * left == num

374. 猜数字大小

题源:猜数字大小

刷题时间:20210909

def guessNumber(n):
    left, right = 0, n
    while left < right:
        mid = left + (right - left) // 2
        if guess(mid) == 1:
            left = mid + 1
        else:
            right = mid
    return left

744. 寻找比目标字母大的最小字母

题源:寻找比目标字母大的最小字母

刷题时间:20210910

与普通二分查找相比,本题多了个循环的概念,因此在最开始对边界进行处理。

def nextGreatestLetter(letters, target):
    lens = len(letters) - 1
    left, right = 0, lens
    if letters[lens] <= target:
        return letters[0]
    while left < right:
        mid = left + (right - left) // 2
        if letters[mid] <= target:
            left = mid + 1
        else:
            right = mid
    return letters[left]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值