Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
C++:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
unordered_map<int,int> m;
for(int i=0;i<nums.size();i++)
{
if(m.count(target-nums[i]))
{
return {i,m[target-nums[i]]};
}
m[nums[i]]=i;
}
return {};
}
};
python:
1.两次遍历,第一次遍历找出数组下标和值的对应关系,存到dict里面。第二次遍历nums[i],找target-nums[i]是否在dict。
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
res_dict={}
if len(nums)<2:
pass
for i,num in enumerate(nums):
res_dict[num]=i
for i, num in enumerate(nums):
if target - num in res_dict and res_dict[target - num] != i:
return [i, res_dict[target - num]]
2.一次遍历:
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
res_dict={}
if len(nums)<2:
pass
for i,num in enumerate(nums):
if target-num in res_dict:
return [res_dict[target-num],i]
else:
res_dict[num]=i
return [0,0]