第1题:编号704.二分查找

65 阅读1分钟

题目

力扣题目链接

给定一个 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