地址:https://leetcode-cn.com/problems/two-sum/
思路:可以通过暴力枚举,但也可以利用无序map来做
Code:
#include<iostream>
#include<algorithm>
#include<vector>
#include<unordered_map>
#include<map>
using namespace std;
//class Solution { //暴力枚举
//public:
// vector<int> twoSum(vector<int>& nums, int target) {
// vector<int> res;
// int n=nums.size(),p=0;
// for(int i=0;i<n&&!p;++i)
// for(int j=i+1;j<n;++j)
// if(nums[i]+nums[j]==target){
// res.push_back(i);
// res.push_back(j);
// p=1; break;
// }
// return res;
// }
//};
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
unordered_map<int,int> imap;
int n=nums.size();
for(int i=0;i<n;imap[nums[i]]=i+1,++i)
if(imap[target-nums[i]]){
res.push_back(imap[target-nums[i]]-1);
res.push_back(i);
break;
}
return res;
}
};
int main()
{
int n,m;
vector<int> iv;
iv.clear();
cin>>n>>m;
for(int i=0,x;i<n;++i)
{
cin>>x;
iv.push_back(x);
}
Solution So;
vector<int> res=So.twoSum(iv,m);
for(auto c: res)
cout<<c<<" ";
cout<<endl;
return 0;
}