力扣hot100——1.两数之和

题目链接:1. 两数之和 - 力扣(LeetCode)
题目概述: 在一个数组中找到两个不同的元素使得和为target,返回其数组下标。

暴力解法

思路: 通过两层循环穷举所有可能的元素组合,找到满足条件的两个数

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 {};
    }
};
  • 时间复杂度:O(n 2) ,n为数组长度
  • 空间复杂度:O(1)

哈希表解法

用unordered_map存放遍历过的元素,遍历数组的时候查询unordered_map是否出现某个元素与之相加等于target。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> num_set;
        for(int i=0;i<nums.size();i++){
            auto temp=num_set.find(target-nums[i]);
            if(temp!=num_set.end()){//找到符合条件的
                return {i,temp->second}; //返回数组下标
            }
            else{//没找到
                num_set.insert({nums[i],i}); //插入目前遍历的元素
            }
        }
        return {};
    }
};
  • 时间复杂度:O (n)
  • 空间复杂度:O (n) 哈希表的存储空间

一些思考

为什么哈希表解法的效率更高

哈希表解法可以看作是对暴力解法的优化,暴力解法第一层for循环依次枚举各个数,第二层for循环再遍历一遍数组,寻找能够与第一次for循环所枚举的数相匹配的元素(两个相加等于target),相当于用O(n)的时间寻找对应的元素;对于哈希表来说,哈希表的查询效率是O(1),相当于用O(1)的时间寻找对应的元素。

posted @ 2025-04-15 13:39  林下清风~  阅读(124)  评论(0)    收藏  举报