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].
问题大意:给定一个整形数组和目标和target,返回数组中,两个数的和等于目标和target的下标。(输入保证只有一个合法的解)
解题思路:直接hash, 把每个数作为key,下标作为值,放入hash表,然后遍历的时候找target – x。
#include<vector> #include<iostream> #include<map> #include<iterator> using namespace std; vector<int> twoSum(vector<int>& nums, int target) { map<int, int> vis; for (int i = 0; i < nums.size(); i++) { if (vis.find(target - nums[i]) != vis.end()) return vector<int>{vis[target - nums[i]], i}; vis[nums[i]] = i; } return vector<int>{-1, -1}; } void test_twoSum(){ vector<int> v1,v2; v1.push_back(2); v1.push_back(7); v1.push_back(11); v1.push_back(3); v1.push_back(32); int target = 9; v2 = twoSum(v1, target); for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++){ cout << *it << endl; } } int main(){ test_twoSum(); getchar(); }