1、两数之和
暴力解
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i,j;
for(i=0;i<nums.size();i++){
for(j=i+1;j<nums.size();j++){
if(nums[i]+nums[j]==target){
return {i,j};
}
}
}
return {i,j};
}
};
倒推法
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i,j;
for(i=1;i<nums.size();i++){
for(j=0;j<i;j++){
if(target-nums[i]==nums[j]){
return {i,j};
}
}
}
return {i,j};
}
};
哈希法
注意vector和unordered_map的用法
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int>res;
unordered_map<int,int> hash;
for(int i=0;i<nums.size();i++){
int another=target-nums[i];
if(hash.count(another)){
res=vector<int>({hash[another],i});
return res;
}
hash[nums[i]]=i;
}
return res;
}
};