给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
算法描述:
复杂度分析
空间复杂度
后面的复杂度也是类似的,不再赘述。
这种搜索算法每一次比较都使搜索范围缩小一半,是典型的二分查找。
这个是二分查找中最简答的一种类型了,我们先来搞定它。 我们来一个具体的例子,假设 nums 为 [-1,0,3,5,9,12]
, target 为 9。
如何将上面的算法转换为容易理解的可执行代码呢?
def binarySearch(nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if len(nums) == 0:
return -1
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid]<target:
left = mid + 1
else:
right = mid-1
# End Condition: left > right
return -1
力扣(LeetCode) (leetcode-cn.com)]
《画解剑指 Offer 》