暴力解:
两层循环。第一层循环为左指针,第二层为右指针,如果遇到两个指针所指的数之和等于target则将下标i, j 返回
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for(int i = 0; i < nums.size(); i++){
for(int j = i+1; j < nums.size(); j ++){
if((nums[i] + nums[j]) == target){
return {i,j};
}
}
}
return {};
}
};
用哈希表:
对于每一个nums[i],我们先去哈希表中找是否存在target-nums[i],之后再将nums[i]插入到哈希表中
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hashtable;
for (int i = 0; i < nums.size(); ++i) {
auto it = hashtable.find(target - nums[i]);
if (it != hashtable.end()) {
return {it->second, i};
}
hashtable[nums[i]] = i;
}
return {};
}
};