leetcode 704. 二分查找(python)

本文详细解析了二分查找算法的实现,通过一个具体的题目示例,阐述了如何在一个有序数组中查找特定元素的下标。文章提供了Python代码示例,并讲解了算法的工作原理和边界条件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接

题目描述:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

解题思路:

注意是begin、end两个位置中间的位置对应的值与target进行比较,不是两个位置处的值的平均值

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        begin,end=0,len(nums)-1
        while begin<=end:
            mm=(begin+end)//2
            if nums[mm]>target:
                end=mm-1
            elif nums[mm]<target:
                begin=mm+1
            else:
                return mm
        return -1
### LeetCode704题:二分查找 LeetCode704题是一个经典的二分查找问题,目标是在一个升序排列的整数数组中找到给定目标值。如果存在该目标值,则返回其索引;否则返回 `-1`。 以下是基于Python实现的一种高效解决方案: #### 解决方案 通过二分查找算法可以有效地解决此问题。时间复杂度为 \(O(\log n)\),空间复杂度为 \(O(1)\)。具体代码如下所示[^6]: ```python class Solution: def search(self, nums: list[int], target: int) -> int: left, right = 0, len(nums) - 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 return -1 ``` 上述代码定义了一个 `search` 方法来执行二分查找操作。它初始化两个指针分别指向数组的起始位置 (`left`) 结束位置 (`right`)。接着,在循环过程中不断调整中间点的位置并比较目标值与当前中间值的关系,从而逐步缩小搜索范围直到找到目标或者确认不存在为止[^6]。 #### 关键点解析 - **初始条件**: 设置左边界 `left=0`, 右边界 `right=len(nums)-1`. - **终止条件**: 当 `left>right` 表明已经遍历完整个列表却未发现目标元素. - **更新规则**: - 如果 `nums[mid]==target` 则直接返回下标 `mid`; - 若 `nums[mid]<target` 那么说明目标只可能位于右半部分因此设置新的左界为 `mid+1`; - 同理当 `nums[mid]>target` 应设新右界为 `mid-1`. 这种策略能够快速定位到所需数值所在位置或判定其缺失情况. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值