LeetCode 1.两数之和

LeetCode 1.两数之和

题目描述:

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解决方法:暴力求解、利用enumerate函数半暴力求解


暴力求解

1.具体方法:

嵌套循环,外部循环遍历数组元素,内部循环遍历当前元素之后的数组元素,判断和是否为target

2.代码:语言python
class Solution:
    def twoSum(self, nums, target):
        m=len(nums)
        for i in range(m):
            k=target-nums[i]
            for j in range(i+1,m):
                if nums[j]==k:
                    return [i,j]

显然这是大家都能想到的解法,效率也是十足的低下。在借鉴了高效率答案之后,将它化为己用,进行深入理解。

利用enumerate函数半暴力求解

1.具体方法:

enumerate函数:enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
例:

seasons = [‘Spring’, ‘Summer’, ‘Fall’, ‘Winter’]
list(enumerate(seasons))
[(0, ‘Spring’), (1, ‘Summer’), (2, ‘Fall’), (3, ‘Winter’)]

遍历enumerate得到的数组(i,num)对,用字典dic存储未找到配对的(num:i)对,若dic中存在元素与当前元素配对,返回结果。巧妙在于将遍历过的值记住,因而只遍历一次。

2.代码:语言python
class Solution:
    def twoSum(self, nums, target):   
        dic = {}
        for i, num in enumerate(nums):
            if (target - num) in dic:
                return i,dic[target - num]
            dic[num] = i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值