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刷题记录——二分简单题的主要内容,如果未能解决你的问题,请参考以下文章