两数之和
第一种方法:暴力循环,直接使用双重循环,虽然速度很慢,但先想一种题解之后再去慢慢想更优解,咱就有一个低保了!!
优解:哈希表(Hash Table)!什么是哈希表呢?简单点就是用于存储键&值对的数据结构。而C++里的map正好符合了这一特点,所以我用map进行求解。map?桥豆麻袋!这里稍微等一下,熟悉C++ STL的应该知道还有无序map即unordered_map其时间复杂度为O(1),这笔在这一题中超越了map的O(log(n)),那这不拿来耍一耍岂不是浪费!当然map与其兄弟unordered_map的用法基本一致。所以照猫画虎还能大捞一笔。废话不多说下面上题解:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hs;
for(int i = 0; i < nums.size(); i ++) {
int r = target -nums[i];
if(hs.count(r))
return {hs[r], i};
hs[nums[i]] = i;
}
return {};
}
};
用图示来更清晰的说明一下上述方法的思路:其核心在于从前往后找,找不到则加入哈希表hs中。
