原题:
1 2 3 4 5
| 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
|
示例 1:
1 2 3
| 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]
|
示例 2:
1 2
| 输入:nums = [3,2,4], target = 6 输出:[1,2]
|
示例 3:
1 2
| 输入:nums = [3,3], target = 6 输出:[0,1]
|
1. 方法一
暴力破解,没什么思路可说的。
1 2 3 4 5 6 7 8 9
| class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for num1 in nums: for num2 in nums: if num1 + num2 == target: if (num1 == num2) & (nums.count(num1) == 1): continue else: return [nums.index(num1),nums.index(num2, nums.index(num1) + 1)]
|
2. 方法二
解题关键主要是想找到 num2 = target - num1,判断num2 是否也在 list 中,找到 num2,再直接返回 num2 的索引即可。
1 2 3 4 5 6 7 8
| class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for num in range(len(nums)): if target - nums[num] in nums: if (nums.count(target - nums[num]) == 1) & (target - nums[num] == nums[num]): continue else: return [num, nums.index(target - nums[num], num + 1)]
|
3. 方法三
遍历数组 nums,num 为当前下标,每个值都判断字典 dic 中是否存在 target-nums[num] 的 key 值;如果存在则找到了两个值,如果不存在则将当前的 (nums[num],num) 存入字典 dic 中,继续遍历直到找到为止。
1 2 3 4 5 6 7 8
| class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: dic = {} for num in range(len(nums)): if dic.get(target - nums[num]) == None : dic[nums[num]] = num else: return [dic[target - nums[num]], num]
|