代码随想录28——哈希表5——HashMap法1——两数之和

🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。

✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!

🔥个人主页:Ethan Yankang
🔥推荐:史上最强八股文 || 一分钟看完我的上千篇博客

🔥温馨提示:划到文末发现专栏彩蛋   点击这里直接传送

🔥本篇概览:数据结构与算法 || 详细讲解了HashMap的用法。containsKey、get、put,K-V型键值对存储,与hashset所含方法截然不同。🌈⭕🔥


【计算机领域一切迷惑的源头都是基本概念的模糊,算法除外】


目录

🌈序言

🌈引出

题目:1. 两数之和

剖析题干重点:

🔥思路分析:

🌈最终代码:

今日问题:

🔥今日总结:

🔥1.k-v键值对

🔥2.基本方法:

🔥2.1containsKey()

🔥2.2get()

🔥2.3put()

🔥3.target-num[i]


🌈序言

算法乃我长久之志也,此关必过。今日得此代码随想录之良品辅助,应按此路学之习之,而长久不可懈怠。

前一系列文章详细讲解了HashSet在无限循环中的使用,建议先将这部分知识掌握之后再来学习本篇内容,点击查看。


🔥 代码随想录27——哈希表4——HashSet法2——判断是否是快乐数(无限循环)-CSDN博客

🔥 代码随想录系列所有算法精讲一键查阅


🌈引出

这是最经典的力扣题目,开门题,难道英雄汉hhh。


题目:1. 两数之和

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1].


剖析题干重点:

显然使用hashMap来存放k-v型数据。这里是以存放的值来求的下标。所以就是key为存放的值,value为下标。


🔥思路分析:

首先我再强调一下 什么时候使用哈希法当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。

本题呢,我就需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,某元素是否遍历过,也就是 是否出现在这个集合。

那么我们就应该想到使用哈希法了。

因为本题,我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适

再来看一下使用数组和set来做哈希法的局限。

  • 数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
  • set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下标位置,因为要返回x 和 y的下标。所以set 也不能用。

此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value再保存数值所在的下标。


接下来需要明确两点:

  • map用来做什么
  • map中key和value分别表示什么

map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)。


map中的存储结构为 {key:数据元素,value:数组元素对应的下标}。

过程如下:

过程一

过程二


🌈最终代码:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res=new int[2];
        var resSet=new HashMap<Integer,Integer>();
        for(int i=0;i<nums.length;i++){
            int temp=target-nums[i];
        
            if(resSet.containsKey(temp)){
                res[0]=i;
                res[1]=resSet.get(temp);
                break;
            }
            resSet.put(nums[i],i);
        }
        return res;
    }
}


今日问题:


🔥今日总结:

HashMap的常用场景:

🔥1.k-v键值对

🔥2.基本方法:

🔥2.1containsKey()

判断是否存在当前的Key的

🔥2.2get()

根据key得到value

🔥2.3put()

存放key,value的

🔥3.target-num[i]

要想到用target-num[i]来求出另一个值是否在里面。

🔥4.HashMap可以减for



📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!

👇下面是专栏彩蛋系列,你会喜欢的!(为了避免影响算法的简洁与优美,这里直接将之前的几十个专栏简化为3个部分,不过你点击开后发现惊喜。)👇


💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖

热门专栏

🌈🌈专栏彩蛋系列

🌈🌈史上最全八股文,欢迎收藏

🌈🌈一篇文章了解我的上千篇博客

💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值