题目:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0,1]
一个假期过去,python 也忘的差不多了,编程也忘得差不多了orz,所以写了一个方案一:
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(len(nums)-1):
for j in range(i+1, len(nums)):
if nums[i]+nums[j] == target:
ans = [i, j]
return (ans)
然后果断超时,然后想了一想,感觉不能用两个for,又写了一个:
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(len(nums)):
list = nums.copy()
list.remove(nums[i])
j = nums[i]
if target - j in list :
if nums.index(target-j) != i:
k = nums.index(target-j)
if k < i:
return (k,i)
list.clear()
这个就通过了,然后优化一下,感觉这样写很笨拙,又写了一个:
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
list = {}
for i in range(len(nums)):
j = nums[i]
if target - j in list:
return (list[target-j],i)
list[j]=i
差不多了。