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)。

相关推荐
AMiner:AI科研助手1 小时前
警惕!你和ChatGPT的对话,可能正在制造分布式妄想
人工智能·分布式·算法·chatgpt·deepseek
CHANG_THE_WORLD5 小时前
并发编程指南 同步操作与强制排序
开发语言·c++·算法
gaoshou455 小时前
代码随想录训练营第三十一天|LeetCode56.合并区间、LeetCode738.单调递增的数字
数据结构·算法
自信的小螺丝钉6 小时前
Leetcode 240. 搜索二维矩阵 II 矩阵 / 二分
算法·leetcode·矩阵
闪电麦坤956 小时前
数据结构:深度优先搜索 (Depth-First Search, DFS)
数据结构·深度优先
KING BOB!!!7 小时前
Leetcode高频 SQL 50 题(基础版)题目记录
sql·mysql·算法·leetcode
我是渣哥7 小时前
Java String vs StringBuilder vs StringBuffer:一个性能优化的探险故事
java·开发语言·jvm·后端·算法·职场和发展·性能优化
THMAIL7 小时前
机器学习从入门到精通 - 机器学习调参终极手册:网格搜索、贝叶斯优化实战
人工智能·python·算法·机器学习·支持向量机·数据挖掘·逻辑回归
lytk998 小时前
矩阵中寻找好子矩阵
线性代数·算法·矩阵
珊瑚怪人8 小时前
算法随笔(一)
算法