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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:01:43