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

相关推荐
AI软著研究员5 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish6 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱7 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者1 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮1 天前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者1 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考1 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习
Wect1 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱1 天前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法