就算告诉我了使用哈希的思路,我写出来的仍然不是最快的,我是一趟循环先安表,再一趟循环找元素

实际上一趟循环就足够:边找边安表 (而且这样还可以免去特判)

如果是边找边安,那每次就是从已有的里头找,如果在后面呢?那就等到循环到后面就行了

有就直接返回,没有就安表

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> m;
 
        for (int i = 0; i < nums.size(); ++i) {
            auto it = m.find(target - nums[i]);
            if (it != m.end()) {
                return {it->second, i};
            } else {
                m[nums[i]] = i;
            }
        }
        return {};
    }
};

往后进阶的 两数之和有序版三数之和