Python中LeetCode代码转OOP风格遇AttributeError问题求助
问题解决与优化方案
一、报错原因及基础修复
你遇到的AttributeError是因为错误地将方法参数当作了类的实例属性。在search方法中,nums和target是传入的参数,不是Solution类的成员变量,不需要用self.前缀访问。
修正基础错误后的OOP代码(保留原遍历逻辑)
from typing import List class Solution: def search(self, nums: List[int], target: int) -> int: a = -1 # 初始化a为-1,避免未定义的情况 for i in range(len(nums)): # 原代码range(len(nums)-1)会漏掉最后一个元素,此处修正 if nums[i] == target: a = i break # 找到目标后直接跳出循环,无需继续遍历 return a
二、符合O(log n)复杂度的优化实现
题目要求O(log n)的时间复杂度,而你原来的线性遍历是O(n),不符合要求。由于数组是升序的,应该用二分查找实现:
优化后的OOP代码
from typing import List 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
代码说明
- 二分查找通过不断缩小搜索范围,每次将区间减半,时间复杂度为O(log n),完全符合题目要求。
- 初始时设置左右指针分别指向数组首尾,每次计算中间索引
mid,比较nums[mid]和target的大小,调整指针位置,直到找到目标或区间为空。
三、原过程式代码的问题补充
你的原过程式代码存在两个问题:
range(len(nums)-1)会遍历到倒数第二个元素,漏掉最后一个元素,导致如果target在数组末尾会找不到。- 没有初始化
a,如果target不存在,try-except虽然能返回-1,但写法不够规范,直接初始化a=-1更清晰。
内容的提问来源于stack exchange,提问作者xlmaster
相关产品推荐
相关产品推荐

