【剑斩OFFER】算法的暴力美学——两数之和

一、题目描述

二、算法原理

思路:差值 + 哈希表

假设我们遍历到 7 这个数字,此时 7 前面的数字都放到哈希表里面,当然不能把 7 也题目放到这个哈希表里面,原因待会说,如果 target - 7 = 2 存在于这个哈希表中,那么符合题目要求,因为 2 + 7 = 9 ,那为什么不能提前把 7 放到哈希表中呢?答:假设哈希表里面只有一个数字 1,taget = 4,此时刚好遍历到数字 2 ,如果我们提前把 2 放到哈希表里面,那么 target - 2 = 2 ,这个 2 刚好在哈希表里面,此时我们返回的值是错误的,不符合题目要求的。

三、代码实现

cpp 复制代码
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> hash;
        for(int i = 0;i < nums.size();i++)
        {
            int cur = target - nums[i];//差值
            if(hash.find(cur) != hash.end()) return {hash[cur],i};//查找差值是否存在
            hash[nums[i]] = i;
        }
        return {};
    }
};
相关推荐
阿洛学长11 小时前
汉洛塔结构思维
算法
木子n111 小时前
第2篇:坐标变换与数学基础:FOC算法的核心数学工具
算法·电机控制·foc
阿Y加油吧11 小时前
两道经典 DP 题:零钱兑换 & 单词拆分(完全背包 + 字符串 DP)
算法
疯狂打码的少年11 小时前
有序线性表删除一个元素:顺序存储 vs 单链表,平均要移动多少个元素?
数据结构·算法·链表
y = xⁿ11 小时前
20天速通LeetCode day07:前缀和
数据结构·算法·leetcode
小雅痞12 小时前
[Java][Leetcode hard] 42. 接雨水
java·开发语言·leetcode
载数而行52012 小时前
算法集训1:模拟,枚举,错误分析,前缀和,差分
算法
hehelm12 小时前
vector模拟实现
前端·javascript·算法
Tina学编程13 小时前
[HOT 100]今日一练------划分字母区间
算法·hot 100
RTC老炮13 小时前
RaptorQ前向纠错算法架构分析
网络·算法·架构·webrtc