Leetcode:1. 两数之和

题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:

输入:nums = [3,2,4], target = 6

输出:[1,2]
示例 3:

输入:nums = [3,3], target = 6

输出:[0,1]

提示:

2 <= nums.length <= 104

-109 <= nums[i] <= 109

-109 <= target <= 109

只会存在一个有效答案

进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

题目

cpp 复制代码
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int n = nums.size();
        for(int i = 0;i < n;i++){
            for(int j = i+1;j < n;j++){
                if(nums[i]+nums[j] == target){
                    return {i,j};
                }
            }
        }
        return {};
    }
};

方法二

哈希表

cpp 复制代码
class Solution {
public:
    // 两数之和解法:哈希表优化查找
    vector<int> twoSum(vector<int>& nums, int target) {
        // 哈希表:键为数组中的数值,值为该数值对应的索引(用于快速查找)
        unordered_map<int, int> hashtable;  // 存储已遍历过的元素信息
        // 遍历数组,i为当前元素的索引
        for (int i = 0; i < nums.size(); ++i) {
            // 计算当前元素需要的"互补数"(即target - 当前数)
            int complement = target - nums[i];
            // 在哈希表中查找是否存在该互补数
            auto it = hashtable.find(complement);  // it是查找结果的迭代器
            // 若找到互补数(it不等于哈希表尾后迭代器)
            if (it != hashtable.end()) {
                // 返回互补数的索引(it->second)和当前元素的索引i
                return {it->second, i};
            }
            hashtable[nums[i]] = i;
        }
        return {};
    }
};

假设 nums = [2, 7, 11, 15],target = 9:

遍历第一个元素(i=0,值为 2):

计算 target - 2 = 7,哈希表为空,未找到。

将 2:0 存入哈希表。

遍历第二个元素(i=1,值为 7):

计算 target -7 = 2,在哈希表中找到键为 2(对应索引 0)。

返回 [0, 1](即 2+7=9)。

相关推荐
C雨后彩虹7 小时前
任务最优调度
java·数据结构·算法·华为·面试
少林码僧9 小时前
2.31 机器学习神器项目实战:如何在真实项目中应用XGBoost等算法
人工智能·python·算法·机器学习·ai·数据挖掘
钱彬 (Qian Bin)9 小时前
项目实践15—全球证件智能识别系统(切换为Qwen3-VL-8B-Instruct图文多模态大模型)
人工智能·算法·机器学习·多模态·全球证件识别
Niuguangshuo10 小时前
EM算法详解:解密“鸡生蛋“的机器学习困局
算法·机器学习·概率论
a31582380610 小时前
Android 大图显示策略优化显示(一)
android·算法·图片加载·大图片
一条大祥脚10 小时前
26.1.9 轮廓线dp 状压最短路 构造
数据结构·c++·算法
鲨莎分不晴11 小时前
反向传播的数学本质:链式法则与动态规划的完美共舞
算法·动态规划
sonadorje11 小时前
逻辑回归中的条件概率
算法·机器学习·逻辑回归
cici1587411 小时前
基于Pan-Tompkins算法的ECG信号HRV提取方案
算法
McGrady-17511 小时前
拓扑导航 vs 几何导航的具体实现位置
算法