0 课程地址
https://coding.imooc.com/lesson/207.html#mid=15344
1 重点关注
1.1 应用场景
hashtable和hashMap底层,安全加密,唯一标志,数据校验,散列函数,负载均衡,数据分片,分布式存储,CRC校验等
参考:https://zhuanlan.zhihu.com/p/572831003
1.2 使用哈希表需注意的问题:
- a 键如何转化为索引?使用合理的哈希函数
- b 如何解决哈希冲突?
2 课程内容
2.1 哈希表(散列表)定义
每个字符和索引相对应,码值映射到一个表中的一个位置来访问记录,增删改查均是O(1)复杂度。
2.2 哈希冲突
哈希冲突:很难保证每一个键对应同唯一的索引,两个不同的键对应同一个索引被称为哈希冲突
3 Coding
3.1 使用哈希表应用思想的场景
解题思想:
根据索引找到字符 建立a-z对应的0-25的减值对,键为索引,值为每个字符出现的次数。遍历字符串的每个字符的索引,可以找到值为1对应的索引。未找到,返回-1;
leetCode :387
问题:字符串中第一个唯一字符,假设所有字符串为小写字母
代码:
class Solution { public int firstUniqChar(String str) { int[] arr = new int[26]; for(int i = 0;i<str.length();i++){ arr[str.charAt(i)-'a']++; } for(int i = 0;i<str.length();i++){ if(arr[str.charAt(i)-'a']==1){ return i; } } return -1; } }
执行结果:
诸葛