题目
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
思路
使用二分法:有序数组,无重复元素
1.先定义左右边界
- while循环,如果是[left, right]左闭右闭,则left能够等于right,while判断left<=right
- while循环,如果是[left,right)左闭右开,则left不能够等于right,while判断用left<right
2.nums[mid]<target, target在右区间,移动左边的下标,因为nums[mid]一定不是target,所以左区间left为mid+1
代码
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums) -1
while left <=right:
mid = (left+right) // 2
if nums[mid]> target:
right= mid -1
elif nums[mid]<target:
left = mid + 1
else:
return mid
return -1