1:题目描述(力扣)
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
2:解题思路
第一步:先判断目标值是否存在于数组中,不存在则直接返回-1
第二步:目标值存在于数组中,先初始化数组的左边界下标(left=0),和右边界下标(right=len(nums)-1),当left <= right,进入循环,寻找目标值
第三步:在第二步的基础上,获取数组中间元素下标,mid=(left+right)//2,判断中间元素(nums[mid])于目标值(target)的大小,当nums[mid]>target,因为数组是有序的,所以目标值在左边界值与中间元素之间,因此修改右边界下标:right=mid-1;当nums[mid]<target,目标值在中间元素与右边界值之间,因此修改左边界下标:left=mid+1;当muns[mid]=target,目标元素找到,返回下标mid
代码展示:
class Solution:
def search(self, nums, target) -> int:
left = 0 # 初始化左边界下标
right = len(nums)-1 # 初始化右边界下标
if target not in nums: return -1 # 判断元素是否在数组中
while left <= right: # 当left<=right时,进入循环
mid = (right+left)//2 # 获取中间元素下标
if nums[mid] < target: # 中间元素小于目标值
left = mid + 1 # 修改左边界下标
elif nums[mid] > target: # 中间元素大于目标值
right = mid - 1 # 修改右边界下标
else: # 中间元素等于目标值
return mid # 返回下标
参考视频:
手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili