【C++算法打怪专栏】LeetCode 1. 两数之和(哈希表解法总结)

【C++算法打怪专栏】LeetCode 1. 两数之和(哈希表解法总结)

一、 题目链接


二、 核心思路与优化

  1. 暴力解法的局限 :如果用两层循环去遍历所有组合,时间复杂度会达到 O ( N 2 ) O(N^2) O(N2),数据量大时会超时。
  2. 哈希表优化(一趟哈希) :
    • 边遍历数组,边将元素及其下标存入 unordered_map(键存数值,值存下标)。
    • 在存入之前,先检查哈希表中是否存在 target - nums[i](即我们需要的另一个数)。
    • 核心优势 :时间复杂度直接降至 O ( N ) O(N) O(N),且由于是"先查找后插入",完美避免了把"元素自身"重复利用的问题。

三、 C++ 标准精简源码

cpp 复制代码
#include <vector>
#include <unordered_map>
using namespace std;

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> mp; // 键:数值,值:对应下标
        
        for (int i = 0; i < nums.size(); i++) {
            int num2 = target - nums[i];
            
            // 如果在哈希表中找到了另一半,直接返回各自的下标
            if (mp.find(num2) != mp.end()) {
                return {mp[num2], i};
            }
            
            // 没找到就把当前元素存入哈希表
            mp[nums[i]] = i;
        }
        
        return {}; // 题目保证有解,防警告兜底
    }
};

四、 复杂度分析

  • 时间复杂度 : O ( N ) O(N) O(N),其中 N N N 是数组的长度。我们只对数组进行了一次单循环,哈希表的查找和插入平均时间复杂度均为 O ( 1 ) O(1) O(1)。
  • 空间复杂度 : O ( N ) O(N) O(N),最坏情况下(如答案在最后两个数或无解前),需要把所有元素存入哈希表中。
相关推荐
牧羊人.3334 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn
akinggw4 小时前
libsherpacore - 基于 sherpa-onnx 的 C++ 语音交互静态库
c++·交互·语音识别
xiaoye-duck4 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(中):全量响应实现和测试
网络·c++·语言模型·chatgpt
小郎君6584 小时前
Vue 多标签页的加载态设计:为什么我没有用 Suspense 实现 PageLoading
vue.js·算法
JJJennie7775 小时前
MAI Gateway私有化部署全攻略:大模型网关如何接入?附架构图
算法·gateway·ai网关·魔芋ai
東隅已逝,桑榆非晚5 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
专注仿真5 小时前
卷积神经网络(CNN)算法详解
人工智能·python·算法·代码·大模型训练
FII工业富联科技服务5 小时前
多智能体如何进入制造现场?从业务协同到数字孪生验证
大数据·人工智能·算法·机器人·制造·数字孪生
≮傷£≯√5 小时前
httpserver_QNetWorkClient
算法
Evand J5 小时前
【PMSM例程11】永磁同步电机(PMSM)基于UKF的转速与转子位置估计。附下载链接
算法·matlab·卡尔曼滤波·永磁同步电机·ukf·pmsm·位置估计