Leetcode-1

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

我的版本:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        index1 = 0
        index2 = 0
        for num1 in nums:
            num2 = target - num1
            if num1 != num2: #看看当前数是不是刚好等于目标数的一半,如果不是,属于简单情况
                if num2 in nums: #如果目标数减去当前数后,所得数刚好在剩下列表中,那么直接得到当前数索引和另一个数的索引
                    index2 = nums.index(num2)
                    break;
                else: #如果目标数减去当前数后,所得数不在剩下列表中,那么当前数索引值+1,继续往后搜索
                    index1+=1;
            elif num1 == num2 and nums.count(num2) == 1: #如果当前恰好等于目标数的一半,那么赶紧查看列表当中当前数是不是有两个,如果只有一个,那么显然不是返回两个当前数索引,说明答案还在后面,继续往后搜索
                index1+=1;
            else: #如果当前恰好等于目标数的一半,而且当前数在列表中有两个,那么不用想了,就是返回这两个数的索引,且第一个数的索引就是当前数
                index2 = nums.index(num2, index1+1) #第二个函数的索引从当前数+1开始寻找,此时找到的索引为第二个数在列表当中的索引
                break;
        return index1, index2

学习了bi站Michelle小思想家的方法,确实运行速度更快:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dict = {}
        for i in range(len(nums)):
            if target - nums[i] not in dict:
                dict[nums[i]] = i
            else:
                return (dict[target-nums[i]],i)

我是萌新,一个晚上7:30到现在9:27只做了这一道题,确实对python还是不太熟,慢慢适应吧,熟能生巧,加油

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值