class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int> my_Map;
vector<int> result;
for(int i = 0 ; i < nums.size() ; i++)
{
//保证每次插入的元素是在my_Map里是唯一的
if(!my_Map.count(nums[i]))
{
my_Map.insert(pair<int, int>(nums[i],i));
}
if(my_Map.count(target-nums[i]))
{
int n = my_Map[target-nums[i]];
//为什么加上n<i,考虑这样一种情况nums=[3,3],target=6,i=0的时候my_Map.count(target-nums[i])=1,条件为真,所以n=my_Map[target_nums[i]]=0,而题目中要求一个数不能用两次,所以必须在最后一个数之前的位置寻找。
if(n < i)
{
result.push_back(i);
result.push_back(n);
return result;
}
}
}
}
};
对于C++ map,红黑树实现低层,比平衡树操作简单,一层红的一层黑的。时间复杂度O(logn)据说hash_map会更快O(n)。
注意:
1.不同的对象的指针不能比较。
2.map的find找到的是第一个所指明的键值的位置。
3.count是统计某一个键值的个数的。
转载请注明原文地址: https://ju.6miu.com/read-32429.html