暴力写法自己写的↓: 也可以直接return {i,j};
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int>ans;
for(int i = 0; i < nums.size(); i++){
for(int j = i+1; j < nums.size(); j++){
if(nums[i]+nums[j] == target){
ans.push_back(i);
ans.push_back(j);
return ans;
}
}
}
return ans;
}
};
哈希表自己写的↓
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int>ans;
unordered_map<int,int> map;
int cnt = 0;
for(int i : nums){
map[i] = cnt++;
}
for(int i = 0; i < nums.size(); i++){
int aim = target - nums[i];
unordered_map<int,int>::const_iterator got = map.find(aim);
if(got != map.end() && got->second != i){
ans.push_back(i);
ans.push_back(got->second);
break;
}
}
return ans;
}
};
官方写的↓ 好简洁 揣手手学习
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 {};
}
};