LeetCode 算法题库【1】——两数之和

两数之和

题目描述:

timu

做题思路:

我是用python写的,下面说几种方法:

  • 第一种:方法是在nums这个数集中看看是否能找到target - nums[i],当然要保证在这个数只有一个,不能重复,最后用index找到该数对应位置,再返回[i,j]。这样算耗时会比较长。
class Solution:
    def twoSum(self, nums, target):
        lens = len(nums)
        for i in range(lens):
            if (target - nums[i]) in nums:
                if (nums.count(target - nums[i]) == 1)&(target - nums[i] == nums[i]):
                    continue
                else:
                    j = nums.index(target - nums[i], i+1)
                    break
        return [i,j]

1

  • 第二种:总的方法还是找target - nums[i],但是这里用到了字典的方法,然后把dic[nums[i]] = i放在循环最后,这样可以避免值的重复。这种方法耗时大大降低。
class Solution:
    def twoSum(self, nums, target):
        lens = len(nums)
        dic = {}
        for i in range(lens):
            if target - nums[i] in dic:
                return [dic[target - nums[i]], i]
            dic[nums[i]] = i
        return None

2

  • 第三种:这个方法还是要用字典,但是我们用到了enumerate()函数,它可以将列表、元组或字符串组合为一个索引序列,并列出数据和数据下标,一般用在 for 循环当中。所以大大简便了运算步骤。耗时也是很短。
class Solution:
    def twoSum(self, nums, target):
        dic = {}
        for i,numbs in enumerate(nums):
            if target - numbs in dic:
                return (dic[target - numbs], i)
            dic[numbs] = i
        return None

3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值