Skip to content

704 Binary Search

题目

Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.

You must write an algorithm with O(log n) runtime complexity.

 

Example 1:

Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4

Example 2:

Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
Explanation: 2 does not exist in nums so return -1

 

Constraints:

  • 1 <= nums.length <= 104
  • -104 < nums[i], target < 104
  • All the integers in nums are unique.
  • nums is sorted in ascending order.
Related Topics
  • 数组
  • 二分查找

  • 👍 1765
  • 👎 0
  • 解法

    最经典的一道二分搜索题,寻找的是准确值,而非相似值,故约束条件是left <= right 需要在循环内找到解,若循环结束仍为找到解时,需要返回 -1

    py
    # leetcode submit region begin(Prohibit modification and deletion)
    class Solution:
        def search(self, nums: List[int], target: int) -> int:
            left = 0
            right = len(nums) - 1
    
            while left <= right:
                mid = (right + left) // 2
    
                if nums[mid] > target:
                    right = mid - 1
                elif nums[mid] ==  target:
                    return mid
                else:
                    left = mid + 1
    
            return -1
            
    # leetcode submit region end(Prohibit modification and deletion)

    复杂度分析

    • 时间复杂度O(logN)
    • 空间复杂度O(1)