#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
using namespace std;
//方法一:暴力法
//class Solution
//{
//public:
// vector<int> twoSum(vector<int>& nums, int target)
// {
// int i,j;
// for(i=0;i<nums.size()-1;i++)
// {
// for(j=i+1;j<=nums.size()-1;j++)
// {
// if(nums[i]+nums[j]==target)
// {
// return {i,j};
// }
// }
// }
// return {i,j};
// }
//};
//方法二:
//class Solution
//{
//public:
// vector<int> twoSum(const vector<int>& nums,int target)
// {
// map<int,int> a;//
// vector<int> b(2,-1);//存放了两个-1;
// for(int i=0;i<nums.size();i++)
// {
// //这里把nums[i]当作键下边方便查找
// a.insert(pair<int,int>(nums[i],i));// //判断是否找到目标且目标元素不能是本身
// if(a.count(target-nums[i])>0&&(a[target-nums[i]]!=0))
// {
// b[0]=i;
// b[1]=a[target-nums[i]];
// break;
// }// }
// return b;
// }
//};
//方法三:
//class Solution
//{
//public:
// vector<int> twoSum(const vector<int>& nums,int target)
// {
// map<int,int> a;
// vector<int> b(2,-1);
// for(int i=0;i<nums.size();i++)
// {
// //查找所有存在map中的
// if(a.count(target-nums[i])>0)
// {
// //因为当前的肯定是最后一个数,所以b[i]才是i
// b[0]=a[target-nums[i]];
// b[1]=i;
// break;
// }
// a[nums[i]]=i;
// }
// return b;
// }
//};
//方法四
class Solution
{
public:
vector<int> twoSum(const vector<int>& nums,int target)
{
unordered_map<int,int> dict;
for(int i=0;i<nums.size();i++)
{
if(dict.count(target-nums[i]))
{
return {dict[target-nums[i]],i};
}
dict[nums[i]]=i;
}
return {};
}
};
int main()
{
vector<int> nums={2,7,11,15};
int target = 9;
Solution* getSum = new Solution;
vector<int> result = getSum->twoSum(nums,target);
if(!result.empty())
{
cout<<result[0]<<' '<<result[1];
}
}