You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode 704二分查找Python函数调用异常问题求助

修复LeetCode 704二分查找的Python代码问题

一、先解决触发的TypeError错误

你当前的函数调用写法有两处致命问题:

  • len(nums = [-1,0,3,5,9,12]) 里的nums=完全多余,len()只接受位置参数,不能用关键字传参,应该改成len([-1,0,3,5,9,12])——但这只是小问题,更关键的是**search是Solution类的实例方法,不能直接全局调用**,必须先创建类的实例再调用方法。

错误调用:

search(0, len(nums = [-1,0,3,5,9,12]),  9)

正确调用示例:

sol = Solution()
result = sol.search([-1,0,3,5,9,12], 9)
print(result)

二、修复二分查找核心逻辑

原代码只执行了一次中间值判断,完全不符合二分查找的流程——必须循环缩小左右边界,直到找到目标或者边界交叉(说明无目标)。另外返回值逻辑也不符合题目要求:

  1. 必须添加while l <= r循环,持续迭代查找
  2. 找到目标时返回对应索引m,没找到时返回-1,不能用print代替return

修复后的完整可运行代码:

from typing import List

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        # 初始化左右边界指针
        l = 0
        r = len(nums) - 1

        # 循环缩小查找范围
        while l <= r:
            # 计算中间索引(避免溢出的写法也可以用 l + (r - l) // 2)
            m = (l + r) // 2
            if nums[m] > target:
                # 目标在左半区间,右边界左移
                r = m - 1
            elif nums[m] < target:
                # 目标在右半区间,左边界右移
                l = m + 1
            else:
                # 找到目标,返回索引
                return m
        # 遍历完所有可能范围仍未找到,返回-1
        return -1

# 测试调用
sol = Solution()
print(sol.search([-1,0,3,5,9,12], 9))  # 输出4,对应目标9的索引
print(sol.search([-1,0,3,5,9,12], 2))  # 输出-1,目标不存在

三、关键错误总结

  • 类方法调用错误:必须通过类的实例调用search,不能直接全局调用;len()禁止传关键字参数。
  • 缺少循环逻辑:二分查找需要迭代缩小边界,单次判断只能处理刚好中间值就是目标的极端情况。
  • 返回值逻辑错误:LeetCode题目要求返回索引,必须用return返回结果,不能用print输出。

内容的提问来源于stack exchange,提问作者trevy berton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:27:21