代码随想录第六天|242.有效的字母异位词|202. 快乐数|203. 两数之和

A的ASCII码是65 a的ASCII是97
java中Int的范围-2147483648——2147483647
java中long的范围”-2^64“ 到”2^64 -1“

1.哈希表理论基础
day6 hash

那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。
将学生姓名映射到哈希表上就涉及到了hash function ,也就是哈希函数。
哈希函数如下图所示,通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值,这样就把学生名字映射为哈希表上的索引数字了
在这里插入图片描述

index = hashFunction(name) = hashCode(name) % tableSize
如果hashCode得到的数值大于 哈希表的大小了,也就是大于tableSize了,怎么办呢?
此时为了保证映射出来的索引数值都落在哈希表上,我们会在再次对数值做一个取模的操作,就要我们就保证了学生姓名一定可以映射到哈希表上了。
此时问题又来了,哈希表我们刚刚说过,就是一个数组。
如果学生的数量大于哈希表的大小怎么办,此时就算哈希函数计算的再均匀,也避免不了会有几位学生的名字同时映射到哈希表 同一个索引下标的位置。
在这里插入图片描述

一般哈希碰撞有两种解决方法, 拉链法和线性探测法

在这里插入图片描述

在这里插入图片描述

242.有效的字母异位词
Integer[] 变成int[]
Integer[] res = set2.toArray(new Integer[0]);
int[] a = Arrays.stream(res).mapToInt(Integer::valueOf).toArray();

  1. 快乐数
    一个数的各个位置上的数字的平方用 % 来获得,下面是方法:
 private int getNextNumber(int n){
        int res = 0;
        while(n > 0){
            int temp = n % 10;
            res += temp * temp;
            n = n / 10;
        }
        return res;
    }
  1. 两数之和
    有两点
    第一点用target - nums[i] + 哈希 来判断
    第二点用map来记录数据,map的key代表数值,map的value存下标,
    方法是不断向前面比,后面的不用比,后面的数字来和前面比
    在遍历数组的时候,只需要向map去查询是否有和目前遍历元素比配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值