Leetcode:1. 两数之和

题目

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

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

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

示例 1:

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

输出:0,1

解释:因为 nums0 + nums1 == 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 <= numsi <= 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)。

相关推荐
yyds_yyd_1008615 分钟前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
KaMeidebaby1 小时前
卡梅德生物技术快报 | 核酸适配体文库测序:核酸适配体文库测序的技术原理、实验流程与数据解析
前端·网络·数据库·人工智能·算法
geovindu2 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
ekkoalex3 小时前
训练框架以及算法实现的框架
算法
DFT计算杂谈3 小时前
交错磁研究进展材料物性与交叉应用
数据库·人工智能·python·opencv·算法
玖玥拾3 小时前
LeetCode 26 删除有序数组中的重复项
算法·leetcode
Kina_C4 小时前
LVS负载均衡的十二种核心调度算法
linux·运维·算法·负载均衡·lvs
吞下星星的少年·-·4 小时前
牛客技能树:小红走矩阵(dp入门)
算法·dp
hansang_IR5 小时前
【题解】[AGC020E] Encoding Subsets
c++·算法·dp
核数聚5 小时前
【赛迪专访核数聚】深耕数据治理,打通数据孤岛夯实 AI 发展根基
大数据·人工智能·算法