242.有效的字母异位词
思路:想到的是分别遍历两个数组,然后用map统计值,一个数组遍历的时候对值++,一个--,如果value没有能消除完,那就不一样。
优化:其实一次遍历就可以做完。
func isAnagram(s string, t string) bool {hash := map[byte]int{}len_s := len(s)len_t := len(t)for i := 0 ; i < len_s ; i++{hash[s[i]]++}for i := 0 ; i < len_t ; i++{hash[t[i]]--}for i,_ := range hash{if hash[i]!= 0{return false}}return true }
349. 两个数组的交集
思路:一开始也想用242的方法,但是不能仅仅从偶数基数来判断,然后想的办法是先把一个数组遍历,存入map中,第二个数组遍历看map里面有不有这个数,然后再穿插一个去重数组。
func intersection(nums1 []int, nums2 []int) []int {res := make([]int,0)hash1 := map[int]int{}inout := map[int]int{}for _,i2 := range nums1{hash1[i2]++}for _,i2 := range nums2{if hash1[i2] != 0 && inout[i2] == 0{res = append(res,i2)inout[i2]++}}return res }
202.快乐数
用-1 和1的返回值来代表输出值,一开始想错了以为个位数就不用判断了,直接看是不是1,其实真正的结束判断是用看是否一个结果出现了两次,如果出现了两次那就是错的。
func isHappy(n int) bool {sumtotal := map[int]int{}res := judgehappy(n,sumtotal)for res != -1 && res != 1{res = judgehappy(res,sumtotal)}if res == -1{return false}else{return true} } func judgehappy(n int,sumtotal map[int]int) int{res := make([]int,0)tmp := nfor tmp != 0{res = append(res,tmp % 10)tmp /= 10}sum := 0for _,i2 := range res{sum += i2 * i2}sumtotal[sum]++for _,i2 := range sumtotal{if i2 > 1{return -1}}return sum }
1.两数之和
思路:暴力思路不多讲,优化的话就是遍历一次数组,边遍历边把数组出现的值和坐标放到哈希表,然后一次一次向哈希表查这个值是否存在,如果有输出没有就往前走
func twoSum(nums []int, target int) []int {m := make(map[int]int)for i, num := range nums {complement := target - numif index, found := m[complement]; found {return []int{index, i}}m[num] = i}return nil // 返回空数组 nil 代替空切片 }