LeetCode[001]
参加DataWhale后组织的第一次训练,希望自己可以坚持下去。
题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
第一次尝试
python小白一个,没什么经验,自己尝试半天就弄出来了这个。
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for x in range(len(nums)):
another_num = target - nums[x]
if another_num in nums:
print(another_num,nums[x])
else:
print('no that thing!')
nums = [2,7,11,15]
target = 9
Solution = Solution()
Solution.twoSum(nums,target)
输出如下:
7 2
2 7
no that thing!
no that thing!
这个显然和要求不一样,题目要求的是返回数组下标,需要补充下标。
修改后得:
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
# 添加空字典
dic={}
for x in range(len(nums)):
another_num = target - nums[x]
if another_num not in dic:
# 新建键值对
dic[nums[x]] = x
else:
print([dic[another_num], x])
nums = [2,7,11,3,6,4,4]
target = 8
Solution = Solution()
Solution.twoSum(nums,target)
输出如下:
[0, 4]
[5, 6]
可以看出正确输出了答案,而且不会重复输出。
还有其他人的答案如下:
原文出处: https://blog.youkuaiyun.com/qq_42570457/article/details/84348339
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(0, len(nums) - 1):
for j in range(i+1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
solution = Solution()
solution.twoSum([2,7,11,13],9)
另外一个解答:
原文出处: https://blog.youkuaiyun.com/xiaoxiaodechongzi/article/details/80537205
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
dict1 = {}
for k, i in enumerate(nums):
dict1[i] = k
if target - i in dict1 and i is not target - i:
return [dict1[target - i], dict1[i]]
nums = [2, 7, 11, 15]
target = 9
s = Solution()
print(s.twoSum(nums, target))