1. 两数之和
这道题自己写的报错,stl方面的东西还不太清楚,如下:

然后看了卡哥思路,卡哥对于该题的视频讲解也非常清晰,很透彻。
感觉卡哥题解有两个特别重要的方面,一个是map的使用(选择哪个map,然后哪个是key,哪个是value),另一个是map里面存放什么。
对于第一个问题,选择ordered_map,map的key存放的是数组的值,map的value存放的是数组的下标。为什么?因为题目要求返回下标。而且这样做的话也方便了后面使用find函数,该函数是通过key来判断存不存在的。
对于第二个问题,map里面存放的是遍历过的元素。不用刚开始就把nums里面的元素全部放到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)
{
auto iter = map.find(target - nums[i]);
if (iter != map.end())
return {iter->second, i};
map.insert(pair<int, int>(nums[i], i));
}
return {};
}
};

浙公网安备 33010602011771号