【LeetCode】1. 两数之和(使用字典)

本文探讨了Python中类的概念,包括self的使用及意义,并通过两道算法题深入讲解了如何利用类和算法优化解决问题,对比了暴力解法与字典优化后的高效解法。

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

以前我写python都是直接写的这次看到实例里第一题就有class有点懵了我以为只有java才要定义class呢不过这还好 紧接着我又碰到了几个问题 现在把我的思考和解答写在下面

 

而且不知道为什么定义的时候还要写self 很奇怪 因为定义的时候需要调用的时候用不用感觉很麻烦

解:

self代表类的实例,而非类  在引用方法的时候创建的类的实例会被传入self中所以要定义一个self

实例来说明

class Test:
    def prt(self):
        print(self)
        print(self.__class__)

t = Test()
t.prt()

执行结果如下

<__main__.Test object at 0x000000000284E080>
<class '__main__.Test'>

从上面的例子中可以很明显的看出,self代表的是类的实例。而self.__class__则指向类

 

 

 

我觉得很好的一点是计算用时和内存用量 这让我有了提高算法的要求 

第一种暴力解法

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
        	for j in range(i+1,len(nums)):
        		if (nums[i]+nums[j])==target:
        			return [i,j]

 

测试的时候遇到了这个问题 TypeError: reverseInteger() missing 1 required positional argument: 'target'

其实实质是,定义的类没有初始化(或赋值)

解:

number = [2,7,11,5]
target = 9
#a = Solution()
print(Solution.twoSum(number,target))

使用时先实例化

number = [2,7,11,5]
target = 9
a = Solution()
print(a.twoSum(number,target))

 

第二种解法

利用字典键值对应的方式

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        d = {}
        for i in range(len(nums)):
			comp=target-nums[i]
            if comp in d:
				if (target-nums[i])!=nums[i]:
					return [d[target-nums[i]],i]
    		d[nums[i]]=i

本来自己已经测试成功了 

但是 我看错了题目 是不能用一个数字2次 但是如果用例里出现 [1,3,3,4] 而目标是6的时候应显示 [1,2] 

而我这种算法会显示null 考虑的不严谨啊

改正了一下 除去了一行成功

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        d = {}
        for i in range(len(nums)):
            if target-nums[i] in d:
                return [d[target-nums[i]],i]
            d[nums[i]]=i

 

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值