哈希
哈希表(Hash Table)是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。解决哈希相关的算法题通常涉及以下几个方面:
- 哈希映射:使用哈希表来映射键和值,常用于需要快速访问数据的场景。
- 去重:利用哈希表存储已经出现过的元素,以实现快速去重。
- 计数:使用哈希表来统计元素出现的次数。
- 分组:将数据分组,组内数据具有相同的特征(如字母异位词分组)。
- 查找匹配:利用哈希表快速查找是否存在匹配的元素或者模式。
解题步骤通常包括:
- 确定哈希表的键(Key)和值(Value)应该是什么。
- 设计合适的哈希函数,以减少哈希碰撞。
- 根据题目要求实现哈希表的插入、删除、查找等操作。
下面是一些使用 Go 语言实现的哈希表相关的代码示例:
例 1:找到数组中第一个唯一的字符
func firstUniqChar(s string) int {
hash := make(map[rune]int)
for _, c := range s {
hash[c]++
}
for i, c := range s {
if hash[c] == 1 {
return i
}
}
return -1
}
例 2:两数之和
func twoSum(nums []int, target int) []int {
hash := make(map[int]int)
for i, num := range nums {
if j, ok := hash[target-num]; ok {
return []int{j, i}
}
hash[num] = i
}
return nil
}
例 3:字母异位词分组
func groupAnagrams(strs []string) [][]string {
hash := make(map[[26]int][]string)
for _, str := range strs {
count := [26]int{}
for _, c := range str {
count[c-'a']++
}
hash[count] = append(hash[count], str)
}
result := make([][]string, 0, len(hash))
for _, group := range hash {
result = append(result, group)
}
return result
}
在解决哈希表相关的算法题时,重要的是理解如何利用哈希表的特性来优化数据的存储和访问。Go 语言的map
类型提供了内建的哈希表实现,可以非常方便地用于解决这类问题。