两数之和twoSum算法

在这里插入图片描述
第1种算法,特别臃肿,浪费内存

'''
1.偏移量0+9=9,元素2+7=9满足条件
2.偏移量4+5=9,元素3+6=9也满足条件
但是字典的后面的键值会覆盖前面,因此使用f '{}'.format(i+nums.index(j)) in dict排除
'''

nums = [2,8,11,15,3,6,4,3,5,9,1]
dict = {}
list = []
def get_target(target):
    for i in range(len(nums)-1):
        for j in nums[i+1:]:
            if nums[i]+j == target:
                if '{}'.format(i+nums.index(j)) in dict: # i+nums.index(j),4+5=9
                    print([i,nums.index(j)]) # 存在问题:列表有两个相同元素时候,比如3,nums.index(j)获取是第1个3的偏移量,而不是后面的3。但是这个问题会被if '{}'.format(i+nums.index(j)) in dict排除,因为第二个重复出现的target会被去掉
                    print('中止')
                    continue
                dict['{}'.format(i+nums.index(j))] = [i,nums.index(j)]
    for i in dict:
        list.append(int(i))
    return dict[str(min(list))]
print(get_target(9))
# print(dict)

第2种算法,两数相减后,判断余数是否还在数组,有的话立即返回,这样思路简单明了。

def twoSum(nums, target):
    for i in range(len(nums)): # len(nums)=10
        num = target - nums[i]
        if num in nums[i+1:]: # i=0时,num=9-2=7 → if 7 in 列表立即返回数据
            return [i, nums.index(num,i+1)]
print(twoSum([0,8,11,15,3,6,4,3,5,7,1],9))

后续继续使用dict把所有可能的结果都存储起来,然后再继续筛选出满足要求3即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值