题目链接:初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台
思路: 这一题最容易想到的思路就是暴力求解,枚举每一对数,看两数之和是否为 ,但是这种方法的时间复杂度达到了
,具体写法写了,下面给出另一种思路:哈希表。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> mp;
for (int i = 0; i < nums.size(); i++) {
if (mp.find(target - nums[i]) != mp.end()) {
// 每次去找哈希表中是否存在target-nums[i],如果存在就表明找到了另一个加数
// vector<int> ret(2, 0);
// ret[0] = mp[target - nums[i]];
// ret[1] = i;
// return ret;
return vector<int> {mp[target - nums[i]], i};
}
mp.insert(pair<int, int>(nums[i], i));
// 注意要用nums[i]当键值,这样才方便查找
}
return {};
}
};
题解思考:要注意的是, 底层是红黑树(还没学的,还不太了解),
底层是哈希表,时间复杂度可以达到
。