代码随想录算法训练营第七天|哈希表理论基础,454.四数相加II ,383. 赎金信 ,15. 三数之和 ,18. 四数之和

刷题建议

刷题建议与debug

  1. 代码随想录目前基本都有了视频讲解,一定要先看视频,事半功倍。
  2. 写博客,将自己的感悟沉淀下来,不然会忘
  3. 大家提问的时候,记得要把问题描述清楚,自己在哪一步遇到了问题,做了哪些调试,而不要只是把代码甩出来,这样方便大家帮忙快速定位问题。

博客内容:(博客记录以及打卡格式

今日学习文章链接和视频链接

Python菜鸟教程

哈希表理论基础

大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。

  1. hash表(散列表)一般哈希表都是用来快速判断一个元素是否出现集合里
  2. hash函数:通过hashCode把名字转化为数值
  3. hash碰撞:小李和小王都映射到了索引下标 1 的位置,这一现象叫做哈希碰撞,解决方法有线性探测法和拉链法
  4. hash结构:比如字典,集合等()了解原理
  5. 用法:空间换时间,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
  6. Hashmap有Key和Value,Key是显性的,意思是if num not in hashmap,这里其实是看num是否是hashmap的key,注意key对应的value哪怕为0,key也存在
    在这里插入图片描述

454.四数相加II

自己看到题目的第一想法

  1. 暴力破解==》明显不行,应该会超时

看完代码随想录之后的想法

  1. n的四次方是不能接受的,那么可以将a+b的值作为一个整体,遍历后存入map,map的key是value,map的值是出现的次数,这相当于巧妙利用Hash
  2. 然后遍历C和D,如果0-(c+d)在map中出现过的话,那么它出现的次数为x,count += x
  3. return count

自己实现过程中遇到哪些困难

  1. 字典默认为空,不是0,所以要单独判断,如果n1 + n2不在hashmap里面,hashmap[n1+n2] = 1

相关题目

383. 赎金信

自己看到题目的第一想法

  1. hashmap,key是字符,value是出现的次数

看完代码随想录之后的想法

  1. 思路正确,但是字典操作错误
  2. 可以用数组,因为都是小写字母
  3. 注意先遍历谁,想清楚

15. 三数之和

自己看到题目的第一想法

  1. 应该是要用Hash,遍历a和b,放在hashmap里面,最后c=-a-b
  2. hashmap[-a-b]是否存在,但是需要去重,abc都需要去重
  3. 无思路

看完代码随想录之后的想法

  1. 先排序,从小到大排序
  2. 关键逻辑在于去重,i,j,k,i的去重复自己画图举例子理解
  3. 双指针思路->遍历i,left=i+1,right=size-1,后left和right相向移动,left不能等于right(题目要求,i,left和right不相等)
  4. 在拿到一个三元组后要对right和left进行去重
  5. i去重,遍历第一个-1的时候已经把-1的所有和为0的结果都查找到了,后续再遇到-1,就是查找之前的子集,所以直接跳过请添加图片描述

自己实现过程中遇到哪些困难

  1. 不明确在找到第一个三元组后,代码上怎么对left和right进行去重

今日收获,记录一下自己的学习时长

  1. 遇到问题:看下描述除了暴力,能否用Hash和双指针解决?Hash的话选择数组,set还是dict?
  2. 如果先排序的话是否能够更加容易解决问题
  3. 注意循环结束条件,边界条件,如何去重
  4. 注意这里能用双指针法因为需要的是value,需要排序,但是拍完序后索引就乱了,所以如果需要索引的,不能用这种思路
  5. 需要去重考虑双指针,不需要去重考虑Hash

18. 四数之和

自己看到题目的第一想法

看完代码随想录之后的想法

自己实现过程中遇到哪些困难

今日收获,记录一下自己的学习时长

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值