——纯编程爱好者,非科班出身
1. 两数之和
第一反应就是hash,重新学习了一下map和unordered_map区别,选择unordered_map便于高效查找,但unordered_map存储效率较低,考虑同步存储/查找。
1. 同步存储/查找时,注意map只能保存一次位置,先查找再存储才可以避免漏掉相同两个数字求和的情况。
2. map.find当未找到目标值时会指向map.end(),所以要增加一个判断条件。
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { int i; unordered_map<int, int> mp; for(i=0;i<nums.size();i++){ unordered_map<int, int>::iterator it = mp.find(target-nums[i]); if(it!=mp.end() && i!=it->second ) return{it->second,i}; mp[nums[i]]=i; } return{}; } };
2. 两数相加
(这道题啃完之后才发现初始化可以在短的链表后补0对齐,绕了一大圈)
模拟加法,从左往右读取,1. 都不指向null