【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。

更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~

👍感谢小伙伴 们点赞、关注!

X 的平方根

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| class Solution : def mySqrt****(**** self****,**** x****:**** int ) -> int : l****,**** r****,**** ans = 0****,**** x****,**** - 1 while l <= r****:**** mid = ( l + r****)**** // 2 if mid * mid <= x****:**** ans = mid l = mid + 1 else : r = mid - 1 return ans |

有效完全平方数

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| class Solution : def isPerfectSquare****(**** self****,**** num****:**** int ) -> bool : l = 0 r = num while l <= r****:**** mid = ( l****+**** r****)//**** 2 if mid * mid == num****:**** return True elif mid * mid < num****:**** l = mid + 1 else : r = mid - 1 return False |

搜索旋转排序数组

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| class Solution : def search****(**** self****,**** nums****:**** List******** ****int**** ****,**** target****:**** int ) -> int : if not nums****:**** return - 1 # 二分法 n = len ( nums****)**** left = 0 right = n - 1 while left <= right****:**** mid = ( left + right****)**** // 2 if nums******** mid******** == target****:**** return mid if nums******** 0******** <= nums******** mid****:**** # 说明左边有序 if nums******** 0******** <= target < nums******** mid****:**** right = mid - 1 else : left = mid + 1 else : # 右边有序 if nums******** mid******** < target <= nums******** n****-**** 1****:**** left = mid + 1 else : right = mid - 1 return - 1 |

搜索二位矩阵

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| class Solution : def searchMatrix****(**** self****,**** matrix****:**** List******** List****\[**** ****int**** ****],**** target****:**** int ) -> bool : if not matrix****:**** return False # 二分查找 row = index // n ; col = index % n m = len ( matrix****)**** n = len ( matrix******** 0****)**** left = 0 right = m * n - 1 while left <= right****:**** mid = ( left + right****)**** // 2 cur_m = mid // n cur_n = mid % n if matrix******** cur_m******** cur_n******** == target****:**** return True elif matrix******** cur_m******** cur_n******** > target****:**** right = mid - 1 else : left = mid + 1 return False |

搜索二维矩阵2

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| def searchMatrix****(**** self****,**** matrix****,**** target****):**** """ :type matrix: ListList\[int] :type target: int :rtype: bool """ # 1.暴力法 for i in range(m) for j in range(n) O(mn) # 2.剪枝搜索,假设从左下角开始搜索O(m+n) if not matrix****:**** return False m = len ( matrix****)**** n = len ( matrix******** 0****)**** row = m - 1 col = 0 while row >= 0 and col < n****:**** if matrix******** row******** col******** > target****:**** row -= 1 elif matrix******** row******** col******** < target****:**** col += 1 else : return True return False |

寻找旋转排序数组中的最小值

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| class Solution : def findMin****(**** self****,**** nums****:**** List******** ****int**** ****)**** -> int : if len ( nums****)**** == 1****:**** return nums******** 0******** left = 0 right = len ( nums****)**** - 1 while left < right****:**** mid = ( left + right****)**** // 2 if nums******** mid******** < nums******** right****:**** # mid可能是最小值 right = mid else : # mid一定不是最小值 left = mid + 1 return nums******** left******** |

关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

觉得不错的小伙伴,感谢点赞、关注加收藏哦!
欢迎关注下方GZH:阿旭算法与机器学习,共同学习交流~

相关推荐
坚持编程的菜鸟6 小时前
模拟实现memmove
c语言·算法·模拟实现memmove
wabs6667 小时前
关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】
数据结构·算法·图论·优先级队列·邻接表·小顶堆·卡码网
坚持编程的菜鸟7 小时前
编写判断大小端程序
c语言·算法·判断大小端
papaofdoudou7 小时前
判断排列逆序奇偶性的乘积判别法(范德蒙德符号法)
人工智能·算法
linux-hzh8 小时前
百日算法修炼 · Day 03
java·算法
问商十三载8 小时前
RAG 检索效果差怎么排查?2026 五层诊断法完整指南
开发语言·人工智能·windows·python·算法
嵌入式老牛9 小时前
三相电气量采集模块设计(三)非同步采样时的精度提升
算法·精度·计量
今天AI了吗10 小时前
精细化落地教程:TimechoAI调参标准+数据清洗规范+误差归因+阈值适配全维度指南
大数据·人工智能·算法
zephyr0511 小时前
从递归到迭代:二叉树非递归前中后序遍历详解
算法
evans在进步11 小时前
LeetCode 2 两数相加:链表模拟加法,Java 图解进位过程
java·leetcode·链表