今天的内容主要是哈希,哈希还是很好玩的
242 有效的字母异位词
直接使用数组作为哈希表,很简单,速率也很快
func isAnagram(s string, t string) bool {
st := make([]int, 26)
for i := 0; i < len(s); i++ {
st[s[i]-'a']++
}
for i := 0; i < len(t); i++ {
st[t[i]-'a']--
}
for i := 0; i < 26; i++ {
if st[i] != 0 {
return false
}
}
return true
}
242 两个表的交集
这道题应该用set吧,不过go语言,直接用了map解决了,也没有什么区别
func intersection(nums1 []int, nums2 []int) []int {
m, ans := make(map[int]bool), make([]int, 0)
for i := 0; i < len(nums1); i++ {
m[nums1[i]] = true
}
for i := 0; i < len(nums2); i++ {
if m[nums2[i]] {
m[nums2[i]] = false
}
}
for k, v := range m {
if !v {
ans = append(ans, k)
}
}
return ans
}
202 快乐数
代码写出来还是快乐的,这道题注意如果不能成功,那应该是进入了循环,用哈希记录一下就好,出现循环错误
func isHappy(n int) bool {
m := make(map[int]bool)
var s, y, temp int
for n != 1{
temp = 0
for s = n; s != 0; {
y = s % 10
s /= 10
temp += y*y
}
if m[temp] {
return false
}
m[temp] = true
n = temp
}
return true
}
两数之和
这道题真是,最开始写算法的时候的梦魇,怎么也写不出来,不过血多了还是简单
func twoSum(nums []int, target int) []int {
m := make(map[int]int)
for i := 0; i < len(nums); i++ {
if v, ok := m[nums[i]]; ok {
return []int{v, i}
}
m[target - nums[i]] = i
}
return []int{-1, -1}
}