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

Posted 战场小包

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]

以上是关于leetcode刷题记录——二分简单题的主要内容,如果未能解决你的问题,请参考以下文章

202006leetcode刷题记录

LeetCode刷题704-简单-二分查找

LeetCode刷题704-简单-二分查找

LeetCode面试刷题技巧-二分查找算法代码思路解析

LeetCode刷题计划

LeetCode刷题计划