注意map进行值插入的两种方式,一种直接赋值,这时如果有这个键,那么值会覆盖掉原来的值,如果使用make_pair进行插入,那么会首先检查有没有这个键,如果有这个键,那么插入元素不会成功,当然值也不会形成覆盖。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
multimap<int,int>m;
m.clear();
for(int i = 0;i < nums.size(); i++)
{
m.insert(make_pair(nums[i],i));
}
multimap<int,int>::iterator it;
sort(nums.begin(),nums.end());
vector<int>solve;
solve.clear();
bool flag = false;
for(int i = 0; i < nums.size() ; i++)
{
if(flag) break;
int k = nums[i];
int k1 = target - k;
int pos = lower_bound(nums.begin(),nums.end(),k1)-nums.begin();
if(pos<nums.size()&&nums[pos]==k1) {
if(pos==i) {
if(pos+1<nums.size()&&nums[pos+1]==k1) {
it = m.find(k);
flag = true;
solve.push_back(it->second);
it++;
solve.push_back(it->second);
}
else continue;
}
else {
it = m.find(k);
flag = true;
solve.push_back(it->second);
it = m.find(k1);
solve.push_back(it->second);
}
}
else continue;
}
return solve;
}
};
验证map插入规则程序:
#include<bits/stdc++.h>
using namespace std;
int main()
{
map<int,int>m;
m.clear();
m[0]=1;
m[0]=3;
m.insert(make_pair(0,2));
cout<<m[0]<<endl;
return 0;
}
输出:3