给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
方法一:
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for x in range(len(nums)):
b = target-nums[x]
if b in nums:
y = nums.index(b)
if y!=x:
return [x,y]
方法二:用字典实现
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
d = {}
for i in range(len(nums)):
a = target - nums[i]
if nums[i] in d:
return [d[nums[i]],i]
else:
d[a] = i
Java实现:类似于python的字典
class Solution {
public int[] twoSum(int[] nums, int target) {
//使用HashMap标记已经遍历过的元素及其索引,键为数值,值为对应的索引
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
// 计算第i个元素与target的差值
int res = target - nums[i];
// 若map的键中包含差值,说明已找到满足要求的一组数,直接返回索引即可
if (map.containsKey(res)) {
return new int[] {map.get(res),i};
}
// 否则继续向map中添加
map.put(nums[i],i);
}
return new int[2];
}
}