leetcode-python-01两数之和

看了很多算法结构的数,觉得leetcode上的题更经典些,我媳妇面试鹅厂,遇到的也是leetcode的原题,我们就认真的刷一遍这些题,并尽可能多的提供好理解的解法。并给出相应的思想与解释。

  1. 题目描述:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
    示例:
给定nums = [2,7,11,15], target=9
因为nums[0] + nums[1] = 2+7 = 9
所以返回[0,1]

解法1:

暴力解法:
循环取出第一个数
依次取出后面的数与第一个数相加
如果和等于目标值,返回这两个数的下标

def add_two_sum(nums, target):
# 暴力破解
    if len(nums) > 1:
       for i in range(len(nums)):
             for j in range(i + 1, len(nums)):
                 sums = nums[i] + nums[j]
                 if sums == target:
                     return [i, j]
         return None
     else:
         return None

解法2:

定义一个字典,
使用enumerate函数,遍历出位置号和元素,
以每次将元素作为key,位置编号作为值放在字典中,
如果需要的差值在字典中,就说明已经有结果了,返回差值和编号

def func(nums, target):
    d = {}
    for i, num in enumerate(nums):
        if target - num in d:
            print([d[target - num], i])
            return [d[target - num], i]
        d[num] = i

if __name__ == '__main__':
    nums = [2, 7, 11, 15]
    target = 9
    func(nums, target)

这个只能返回一组,如果改成:nums = [ 11, 15,1,8]就会返回:[2, 3]
但是改成nums = [ 2,7,11, 15,1,8]就会返回:[0, 1]

解法3:

只用本列表,遍历列表。每次看这个值与结果的差值是否在本列表中,
有的话返回它的位置,我们使用了列表的index方法,需要考虑【3,3】,6,这种数据,所以使用了try,except,循环过程中index和i不相同

def add_two_sum1(nums, target):
    if len(nums) > 1:
        for i in range(len(nums)):
            result = target - nums[i]  # 结果 ,查看是否在列表中6-3=3
            if result in nums:  #
                try:
                    index = nums.index(result, i + 1)
                    if index != i:
                        return [i, index]
                except:
                    pass
    else:
        return None

解法4:

定义一个字典,
以每次将需要的差值作为key,遍历的次数i作为值放在字典中,
如果这个值在字典中,就说明已经有结果了,返回差值和编号

def add_two_sum2(nums, target):
    dic={}
    for i in range(len(nums)):
        if nums[i] in dic.keys():
            return [i, dic[nums[i]]]
        dic[target-nums[i]] = i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值