leetcode:704. 二分查找(python3解法)
发布人:shili8
发布时间:2025-02-03 21:10
阅读次数:0
**二分查找**
================二分查找(Binary Search)是一种常见的算法,用于在已排序的列表中找到特定元素。它通过对列表进行一系列的比较来实现,这些比较是基于列表的中间值。
**问题描述**
-------------
给定一个有序整数数组 `nums` 和一个目标整数 `target`,请编写一个函数 `search`,返回 `target` 在 `nums` 中的索引。如果 `target` 不在 `nums` 中,则返回 `-1`。
**示例**
--------
* 输入:`nums = [-1,0,3,5,9,12]`, `target =9`
* 输出:`4`
* 输入:`nums = [-1,0,3,5,9,12]`, `target =2`
* 输出:`-1`
**解决方案**
------------### **二分查找算法**
二分查找的基本思想是将列表分成两半,然后比较中间值与目标值。如果中间值等于目标值,则找到目标值。否则,如果中间值小于目标值,则目标值位于中间值之后;如果中间值大于目标值,则目标值位于中间值之前。
def search(nums, target): """ 在有序整数数组中查找特定元素的索引。 Args: nums (list): 有序整数数组。 target (int): 目标整数。 Returns: int: 如果目标值在列表中,则返回其索引;否则,返回 -1。 """ # 列表长度 n = len(nums) # 初始化左边界和右边界 left, right =0, n -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 # 如果没有找到目标值,则返回 -1 return -1# 示例使用nums = [-1,0,3,5,9,12] target =9print(search(nums, target)) # 输出:4nums = [-1,0,3,5,9,12] target =2print(search(nums, target)) # 输出:-1
**时间复杂度**
--------------
二分查找的时间复杂度为 O(log n),其中 n 是列表长度。这是因为每次比较中间值与目标值后,列表长度减半。
**空间复杂度**
--------------
二分查找的空间复杂度为 O(1),因为它不需要额外的存储空间。