前言
看lol世界赛入迷了,最近心情也很浮躁。哈希表题目看着很简单,然而并写不出来。基础知识很多东西都不知道,没有基础是写不了题的,明天看看map,golang基础也要赶紧学完。
内容
一、查找共用字符
给你一个字符串数组 words
,请你找出所有在 words
的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。
func commonChars(words []string) (ans []string) {
minFreq:=[26]int{}
for i:=range minFreq{
minFreq[i]=math.MaxInt64
}
for _,word:=range words{
freq:=[26]int{}
for _,b:=range word{
freq[b-'a']++
}
for i,f:=range freq[:]{//通过使用 freq[:],我们获取了 freq 切片的副本,这样在循环过程中不会修改原始切片。
if f<minFreq[i]{
minFreq[i]=f
}
}
}
for i:=byte(0);i<26;i++{//初始化变量 i 为 byte 类型,并将其值设置为 0。
for j:=0;j<minFreq[i];j++{
ans=append(ans,string('a'+i))//'a' + 0 是字母 'a','a' + 1 是字母 'b',以此类推,直到 'a' + 25 是字母 'z'
}
}
return
}
二、两个数组的交集
给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
两个集合
func intersection(nums1 []int, nums2 []int) (ans []int) {
hashTable1:=map[int]struct{}{}
hashTable2:=map[int]struct{}{}
for _,v:=range nums1{
hashTable1[v]=struct{}{}//向 map set1 中添加一个键值对。这里的键是 v,值是 struct{}
}
for _,v:=range nums2{
hashTable2[v]=struct{}{}
}
if len(hashTable1)>len(hashTable2){
hashTable1,hashTable2=hashTable2,hashTable1
}
for v:=range hashTable1{
if _,has:=hashTable2[v];has{
ans=append(ans,v)
}
}
return
}
最后
调整一下,静心学习!