leetcode1两数之和

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

方法一 暴力解法

复杂度分析:时间复杂度:O(n^2)空间复杂度:O(1) – 5s

class Solution(object):

def twoSum(self, nums, target):

“”"

:type nums: List[int]

:type target: int

:rtype: List[int]

“”"

length = len(nums)

for i in range(length):

for j in range(i + 1, length):

if nums[i] + nums[j] == target:

return [i, j]

if name == ‘main’:

nums = [2, 7, 11, 15]

target = 9

print(Solution().twoSum(nums, target))

方法二 利用python切片。 其实原理跟2次遍历一样

解题关键主要是想找到 num2 = target - num1,是否也在list中,- 1s

class Solution(object):

def twoSum(self, nums, target):

“”"

:type nums: List[int]

:type target: int

:rtype: List[int]

“”"

if not nums:

return

for i in range(len(nums)):

if target - nums[i] in nums[i + 1:]:

return [i, nums.index(target - nums[i], i + 1)]

if name == ‘main’:

nums = [2, 7, 11, 15]

target = 9

print(Solution().twoSum(nums, target))

方法三、直接哈希记录需要的key,遍历到就是找到需要的值: – 80ms

复杂度分析:时间复杂度:O(n)空间复杂度:O(n)

class Solution(object):
def twoSum(self, nums, target):
“”"
:type nums: List[int]
:type target: int
:rtype: List[int]
“”"
# not 0 == True!!!
if not nums:
return
d = {}
for i, n in enumerate(nums):
print(i)
print(n)
print("*************")
m = target - n
if m in d:
return [d[m], i]
else:
d[n] = i

if name == ‘main’:
nums = [2, 7, 11, 15]
target = 9
print(Solution().twoSum(nums, target))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值