LeetCode——1.两数之和

今天开始将记录自己学习LeedCode的过程

题目链接:两数之和

本题如果用暴力解法很简单:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans;
        for(int i=0;i<nums.size();i++){
            for(int j=i+1;j<nums.size();j++){
                if(nums[i]+nums[j]==target){
                    ans.push_back(i);
                    ans.push_back(j);
                }
            }
        }
        return ans;
    }
};

但是这样做,太慢

image

时间复杂度为O(n^2)

因为本题只要找出两个数,使其和=target,因此也可以理解成targer-nums[i]==nums[j]

因此,我们创建一个哈希表,通过以空间换时间

注意此处使用unordered_map

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> Hashmap;
        int complement;
        for(int i=0;i<nums.size();i++){
            auto it=Hashmap.find(target-nums[i]);
            //如果找到了
            if(it!=Hashmap.end()){
                return {it->second,i};
            }
            //没有找到,那么插入新元素
            Hashmap[nums[i]]=i;
        }
        return {};
    }
};

结果如下:

image


本文完

posted @ 2022-07-26 11:28  Sky6634  阅读(36)  评论(0)    收藏  举报