题目描述
思路
首先想到的自然是双层for
循环,但是除了for
循环还可以用unordered_map
;
对于每一个nums[i]
,寻找map
中是否有target-nums[i]
,如果有则返回角下标,如果没有则将nums[i]
和下标保存进map
,这同时也确保了数组中的同一个元素在答案里不能重复出现。
代码实现
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target)
{
unordered_map<int,int> map;
for(int i=0;i<nums.size();i++)
{
//对于每一个nums[i],寻找map中是否有target-nums[i],如果有则返回角下标,如果没有则将nums[i]和下标保存进map
//这同时也确保了数组中的同一个元素在答案里不能重复出现
auto iter=map.find(target-nums[i]);
if(iter!=map.end())
{
return {
i,iter->second};
}
map.insert(pair<int,int>(nums[i],i));
}
return {
};
}
};
总结
即使是第一题这种的简单题,也不应该做出来就完事,多想想更好的方法。