LeetCode题目
242.有效的字母异位词
代码如下:
func isAnagram(s string, t string) bool {
record := [26]int{}
for _, c := range s {
record[c-int32('a')]++
}
for _, c := range t {
record[c-int32('a')]--
}
return record == [26]int{}
}
349.两个数组的交集
题目链接:Intersection of Two Arrays - LeetCode
代码如下:
func intersection(nums1 []int, nums2 []int) []int {
set := make(map[int]int, 0)
result := make([]int, 0)
for _, i := range nums1 {
if _, ok := set[i]; !ok {
set[i] = 0
}
}
for _, i := range nums2 {
if _, ok := set[i]; ok {
result = append(result, i)
delete(set, i)
}
}
return result
}
202.快乐数
代码如下:
func getSum(n int) int {
sum := 0
for n > 0 {
sum += (n % 10) * (n % 10)
n = n / 10
}
return sum
}
func isHappy(n int) bool {
set := make(map[int]bool)
for n != 1 && !set[n] {
set[n] = true
n = getSum(n)
}
return n == 1
}
1.两数之和
题目链接:Two Sum - LeetCode
代码如下:
func twoSum(nums []int, target int) []int {
set := make(map[int]int, 0)
for index, val := range nums {
if elem, ok := set[target-val]; ok {
return []int{elem, index}
} else {
set[val] = index
}
}
return []int{}
}
总结
- 哈希表、哈希函数、哈希碰撞
- 一般哈希碰撞有两种解决方法,拉链法和线性探测法
- 常见的三种哈希结构,数组、set(集合)、map(映射)
- 当遇到要快速判断一个元素是否出现在集合里的时候,就要考虑哈希法
- 哈希法牺牲空间换取时间