python指针难度_LeetCode上一道python指针问题~请教

例题:现有列表nums=[2, 7, 11, 15],target=9。

要求:在列表中找出两个数字,使得两个数字和为target(target=9),返回它们索引。

此题是:因为2+7=9,所以返回2,7的索引为0,1。

LeetCode的编码行为:

class Solution:

def twoSum(self, nums, target):

""":type nums: List[int]:type target: int:rtype: List[int]"""

我的最初的代码是(在编辑器里运行):

class Solution:

def twoSum(self, nums, target):

""":type nums: List[int]:type target: int:rtype: List[int]"""

nums_1= nums

while (len(nums_1) != 0):

second_num = target - nums_1[0]

first_num = nums_1[0]

del nums_1[0]

if second_num in nums_1:

return [nums.index(first_num), nums.index(second_num)]

aaa = Solution()

print(aaa.twoSum([2, 7, 11, 15], 9))

报错为:ValueError: 2 is not in list

显然,虽然我重新定义了一个变量:nums_1,但是当我删去nums_1中的元素2时,原列表nums也跟着删去了2,所以报错2不在nums中。但是,我明明对nums没有使用删去命令。这样只能说明了,nums_1和nums之间存在指针关系。

我想问的是这是什么样的指针关系?一个变,另一个也跟着变。

但是,如果是最简单的代码:

a = 0

b = a

a += 100

print(a)

print(b)

显然输出结果为: a=1000,b=0。

那么,为什么这里a和b之间不存在指针关系啊(a和b如果存在指针的话,就一起发生变化了。)?和上面那个错误不一样吗?

以前,在用pandas也遇到过这种问题,我都是避开,这道题避开指针的方法,也是正确的方法为(也就是先赋予个变量):

class Solution:

def twoSum(self, nums, target):

""":type nums: List[int]:type target: int:rtype: List[int]"""

nums_1 = []

nums_1[:] = nums

while (len(nums_1) != 0):

second_num = target - nums_1[0]

first_num = nums_1[0]

del nums_1[0]

if second_num in nums_1:

return [nums.index(first_num), nums.index(second_num)]

aaa = Solution()

print(aaa.twoSum([2, 7, 11, 15], 9))

后来,这个方法不完全正确,比如分不开[3, 3]的情况。

正确的为:

class Solution:

def twoSum(self, nums, target):

""":type nums: List[int]:type target: int:rtype: List[int]"""

i = -1

while (len(nums) != 0):

second_num = target - nums[0]

del nums[0]

i += 1

if second_num in nums:

return [i, nums.index(second_num)+i+1]

当然哈,这种解法不一定是最优解,只希望同学们帮我看看我的问题,小白请教了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值