二分查找基本写法 def binarySearch(nums,target): n = len(nums) left,right = 0,n-1 mid = (left + right) // 2 ## 取中心 while left <= right: if nums[mid] == target: return mid if nums[mid] >= target: right = mid - 1 else: left = mid + 1 return -1 相关练习LeetCode中相关的题目: 33.搜索旋转排序数组: 二分查找,一半有序,另一半半有序 34.在排序数组中查找元素的第一个和最后一个位置 题目详细描述搜索旋转排序数组: class Solution: def search(self, nums: List[int], target: int) -> int: n = len(nums) left = 0 right = n-1 while(left <= right): mid = (left + right) // 2 ## 取中心 if nums[mid] == target: ## 当找到就返回所在的下标 return mid ## 当[l,mid-1]是有序数组的时候 0表示最左侧,也可以使用left if nums[0] <= nums[mid]: ## 如果target在[0,mid]中,则在[l,mid-1]中查找 if nums[0] <= target < nums[mid]: right = mid - 1 else: ## 否则在[mid+1,r]中查找 left = mid + 1 else: ## 当[mid, r] 是有序数组的时候, n-1表示最右侧,也可以使用right ## 如果target在[mid+1,r]中,则在[mid+1,r]中查找 if nums[mid] < target <= nums[n-1]: left = mid + 1 else: ## 否则在[l,mid-1]中查找 right = mid - 1 return -1文章作者: unnoyy文章链接: http://unnoyy.github.io/posts/t0004/版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 unnoyy!summaryleetcodealgorithm上一篇基础算法题总结5--滑动窗口下一篇基础算法题总结3--动态规划、中心扩散、Manacher算法 相关推荐 2021-03-31基础算法题总结2--回溯法相关 2021-03-20基础算法题总结1--位运算相关 2021-04-06基础算法题总结6--python输入输出格式 2021-04-01基础算法题总结3--动态规划、中心扩散、Manacher算法 2021-04-03基础算法题总结5--滑动窗口 2021-04-13基础算法题总结8--排序算法 评论ValineGitalk