当前位置:实例文章 » 其他实例» [文章]leetcode:704. 二分查找(python3解法)

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),因为它不需要额外的存储空间。

其他信息

其他资源

Top