首页 > 其他分享 >力扣 1题 两数之和(哈希) 记录

力扣 1题 两数之和(哈希) 记录

时间:2024-06-01 22:30:54浏览次数:22  
标签:map target nums iter 力扣 索引 哈希 两数

题目描述

给定一个整数数组 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]

思想

  1. 创建一个 unordered_map<int, int>,用于存储数组元素及其对应的索引。
  2. 遍历输入数组 nums:
    (1)使用 find 方法检查 target - nums[i] 是否已经在哈希表中(即查找当前元素的补数是否存在)。
    (2)如果存在,使用 return {iter->second, i}; 返回一对索引:iter->second(补数的索引)和 i(当前元素的索引)。
  3. 如果不存在,将当前元素及其索引添加到哈希表中,以便后续查找。 如果遍历结束仍未找到符合条件的一对数字,返回一个空的向量 {}。

流程:

索引 i = 0, 元素 nums[i] = 2:

  • 计算 target - nums[i] = 9 - 2 = 7。
  • 查找 7 是否在哈希表中。此时,哈希表为空,因此查找不到。
  • 将 (2,0) 加入哈希表。哈希表现在是 {2: 0}。

索引 i = 1, 元素 nums[i] = 7:

  • 计算 target - nums[i] = 9 - 7 = 2。
  • 查找 2 是否在哈希表中。由于之前我们已经添加了 (2, 0),所以能够找到 2,并且 iter->second = 0(2 的索引)。
  • 由于找到了匹配的数,返回 {0, 1}。这表明在数组 nums 中,索引 0 的值 2 和索引 1 的值 7 相加等于 9。

完整代码

#include<iostream>
#include<vector>
#include<unordered_map>
using namespace std;

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> map;
        for(int i = 0; i < nums.size(); i++){
            auto iter = map.find(target - nums[i]);
            if(iter != map.end()){ // 如果 target - nums[i] 被找到,则返回nums[i]的索引和当前 target - nums[i] 的索引
                return {iter->second, i}; 
            }
            else map.insert(pair<int, int>(nums[i], i)); // 添加当前值及其索引,如{2:0, 7:1}
        }
        return {};
    }
};

int main()
{
    Solution s;
    vector<int> nums = {2, 7, 11, 15};
    int target = 9;
    vector<int> result = s.twoSum(nums, target);
    for(int num : result){
        cout << num << " ";
    }
    return 0;
}

标签:map,target,nums,iter,力扣,索引,哈希,两数
From: https://blog.csdn.net/m0_49800270/article/details/139380429

相关文章

  • 深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)
    在本篇文章中,我们将详细解读力扣第170题“两数之和III-数据结构设计”。通过学习本篇文章,读者将掌握如何设计一个数据结构来支持两种操作,并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释和ASCII图解,以便于理解。问题描述力扣第170题“两数之和III......
  • 力扣刷題---回文數 擊敗100%用戶的解法
    題目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例1:输入:x=121输出:true示例 2:输入:x=-121输出:false解释:从左向右读,为-121。从右......
  • LeetCode---哈希表
    242.有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。代码示例: //时间复杂度:O(n)//空间复杂度:O(1)classSolution{public:......
  • 力扣每日一题 5/31
    2965.找出缺失和重复的数字[简单] 题目:给你一个下标从 0 开始的二维整数矩阵 grid,大小为 n*n ,其中的值在 [1,n2] 范围内。除了 a 出现 两次,b 缺失 之外,每个整数都 恰好出现一次 。任务是找出重复的数字a 和缺失的数字 b 。返回一个下标从0开始、长......
  • 力扣--11.盛最多水的容器
    给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i,0) 和 (i,height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例1:输入:[1,8,6,2,5,4,8,3,......
  • Leetcode 力扣106. 从中序与后序遍历序列构造二叉树 (抖音号:708231408)
    给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。示例1:输入:inorder=[9,3,15,20,7],postorder=[9,15,7,20,3]输出:[3,9,20,null,null,15,7]示例2:输入:inorder=[......
  • Leetcode 力扣105. 从前序与中序遍历序列构造二叉树 (抖音号:708231408)
    给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例1:输入:preorder=[3,9,20,15,7],inorder=[9,3,15,20,7]输出:[3,9,20,null,null,15,7]示例2:输入:preorder......
  • 哈希曼压缩算法
    一、哈夫曼压缩算法的原理? (1)哈夫曼压缩算法是一种无损数据压缩算法,它通过建立一种基于字符出现频率的二叉树来实现数据压缩。它的原理很简单:就是根据字符出现的频率,给高频字符分配较短的编码,低频字符分配较长的编码。这样一来,整个文件的总编码长度就大大缩短了,从而达到......
  • 力扣:5. 最长回文子串
    5.最长回文子串给你一个字符串 s,找到 s 中最长的 回文子串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"提示:1<=s.length<=1000s 仅由数字和英文字母组成classSolution{publicStringlonges......
  • 力扣-474. 一和零
    1.题目题目地址(474.一和零-力扣(LeetCode))https://leetcode.cn/problems/ones-and-zeroes/题目描述给你一个二进制字符串数组strs和两个整数m和n。请你找出并返回strs的最大子集的长度,该子集中最多有m个0和n个1。如果x的所有元素也是y的元素,集合......