时间复杂度O(n)
依次从头到尾遍历为n次,每次遍历时,通过map的红黑树来遍历检查之前的数是否匹配当前数。
2与当前红黑中数不匹配被入了map,插入红黑数。【2的匹配数7在不在树中,因此2入树,若7在map中就匹配了,返回二者的value的下标】
遍历下一数,不匹配就插入,直到匹配的数字7出现,7与树中的2匹配,返回2-7在数组中的位置。
注:数字作为字典的key 数组下标作为value
因此要返回vector时候可以用数组的写法返回
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hash;
for(int i = 0; i < nums.size(); i++){
if(hash.count(target - nums[i]))
return {hash[target - nums[i]], i};
hash[nums[i]] = i;
}
return {-1, -1};
}
};