力扣热门100
约 384 字大约 1 分钟
2025-06-22
这篇文章主要用来记录我对力扣热门的100算法题目的理解,多说无益往下看就好!
1.两数之和
这个题目,很多人刷的第一题,就像是吉他上面的大横按,很多人都在这里选择了放弃。当时记得我第一次看到这一题也是难受了好长时间,然后到后来系统的学习过算法和刷了一些题目之后呢这道题也就不攻自破了,但是想到更多的还是暴力,直接
O(n2)
的时间复杂度,这样来说还是有些不够的,所以因为需要多次的快速查询这里可以使用hash来进行优化。
暴力解法
class Solution {
public:
	//可以看到返回的类型是数组
    vector<int> twoSum(vector<int>& nums, int target){
        for(int i = 0; i < nums.size(); i++){
            for(int j = i + 1; j < nums.size(); j++){
                if(nums[i] + nums[j] == target){
                    return {i, j};
                }
            }
        }
        return {};//不管结果如何都是要返回的
    }
};hash优化
#include <unordered_map>
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target){
        unordered_map<int, int> hash;
        for(int i=0; i<nums.size(); i++){
            // 在哈希表中寻找另一个数,如果找到了就返回一个指向这个键值对的迭代器,否则会返回hash.end()
            auto it = hash.find(target-nums[i]);
            // 如果找到另一个数
            if(it != hash.end()){
                return {i, it->second};
            }
            // 如果没找到,将当前遍历元素存入哈希表
            hash[nums[i]] = i;
        }
        return {};
    }
};