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)
二、修复二分查找核心逻辑
原代码只执行了一次中间值判断,完全不符合二分查找的流程——必须循环缩小左右边界,直到找到目标或者边界交叉(说明无目标)。另外返回值逻辑也不符合题目要求:
- 必须添加
while l <= r循环,持续迭代查找 - 找到目标时返回对应索引
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
相关产品推荐
相关产品推荐

