传送门:Two Sum
给定一个数组,求出其中和为target的两个数的位置,输入保证只有一组解
用map记录每个数出现的位置,然后对于数组中的数x,查找target - x是否出现过,出现则返回对应两个数的位置,否则记录x的出现的位置
class Solution {
public:
vector<int> twoSum(vector<int> &numbers, int target) {
vector <int> ans;
map <int,int> p;
for(int i = 0;i < numbers.size();i++)
{
int x = numbers[i];
int y = target - x;
if(p[y] != 0)
{
ans.push_back(p[y]);
ans.push_back(i+1);
return ans;
}
else
p[numbers[i]] = i + 1;
}
}
};
用dictionary记录每个数的出现的位置,然后同上
class Solution:
# @return a tuple, (index1, index2)
def twoSum(self, num, target):
p = {}
cnt = 0
for x in num:
y = target - x
if p.has_key(y):
return p[y],cnt+1
else:
p[x] = cnt + 1
cnt = cnt + 1