242.有效的字母异位词
文章讲解:https://programmercarl.com/%E5%93%88%E5%B8%8C%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html
思路: map遍历两遍么 第一次++ 第二次-- 最后判断map的总长度
func isAnagram(s string, t string) bool {
mp1:=make(map[byte]int)
for v := range s {
t:=s[v]
mp1[t]++
}
for v := range t {
t:=t[v]
mp1[t]--
if mp1[t] ==0{
delete(mp1,t)
}
}
return len(mp1)==0
}
卡老师的方法 真简洁
func isAnagram(s string, t string) bool {
record:= [26]int{}
for _, v := range s {
record[v-rune('a')]++
}
for _, v := range t {
record[v-rune('a')]--
}
return record == [26]int{}
}
349.两个数组的交集
题目链接/文章讲解/视频讲解:https://programmercarl.com/0349.%E4%B8%A4%E4%B8%AA%E6%95%B0%E7%BB%84%E7%9A%84%E4%BA%A4%E9%9B%86.html
思路:直接一个map 值可以不设置
func intersection(nums1 []int, nums2 []int) []int {
mp1:=make(map[int]struct{},0)
result := make([]int, 0)
for _, v := range nums1 {
if _,ok:=mp1[v];!ok{//去重如果有多个这个只取一个
mp1[v]=struct{}{}
}
}
for _, v := range nums2 {
if _,ok:=mp1[v];ok{//去重
result=append(result,v)
delete(mp1,v)
}
}
return result
}
202.快乐数
题目链接/文章讲解:https://programmercarl.com/0202.%E5%BF%AB%E4%B9%90%E6%95%B0.html
思路:!m[n]判断不循环 如果出现相同的数就代表循环了
func isHappy(n int) bool {
m:=make(map[int]bool, 0)
for n!=1&&!m[n] {// !m[n]判断不循环 如果出现相同的数就代表循环了
n,m[n]=getSum(n),true
}
return n == 1
}
func getSum(i int)int{
sum:=0
for i>0{
sum += (i%10)*(i%10)
i!=10
}
return sum
}
4.两数之和
题目链接/文章讲解/视频讲解:https://programmercarl.com/0001.%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html
// 思路 一遍遍历就行了不需要两次, target-v = key 找到key的存在那就说明有两数和
func twoSum(nums []int, target int) []int {
mp1:=make(map[int]int)
for idx1, v := range nums {
key:=target-v
if idx2,ok:=mp1[key];ok {
return []int{idx1,idx2}
}else {
mp1[v]=idx1
}
}
return []int{0,0}
}
//暴力解法
func twoSum(nums []int, target int) []int {
for k1, _:= range nums {
for k2 := k1+1; k2 < len(nums); k2++ {
if nums[k1]+nums[k2]==target{
return []int{k1,k2}
}
}
}
return []int{}
}