LeetCode题目:1. Two Sum
原题链接:https://leetcode.com/problems/two-sum/description/
解题思路:
核心思想:
用Hash函数h,使得对任意一个值value,h(value)和h(target-value)指向同一个位置,第一次进入该位置进行标记,当第二次进入该位置时,代表value和target-value在数组中同时出现,他们在数组中的位置即为答案。
代码细节:
1.用map容器代表Hash函数,map(value)=position(该value在数组的位置)。
2.数组遍历时,首先判断map(target-value)存不存在。如果存在(第二次进入),则value和target-value同时出现,而target-value在数组中的位置为map(value),即可得出结果。如果不存在(第一次进入),则将value存入到map。
坑点:
1.数据有负值
2.可能为0+0=0
代码:
//#include <map>
vector<int> twoSum(vector<int>& nums, int target) {
map<int, int> hashTable; // 用map代表hash表
vector<int> returnVec; // 用于返回的vector
for (int i = 0; i < nums.size(); i++) {
// 若对应值不存在,插入hash表
if (hashTable.find(nums[i]) == hashTable.end())
hashTable.insert(map<int, int>::value_type(target - nums[i], i));
// 对应值存在,输出结果
else {
int leftPosition = hashTable[nums[i]];
// 将位置返回
returnVec.push_back(leftPosition);
returnVec.push_back(i);
break;
}
}
return returnVec;
}