代码随想录算法训练营第六天| 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和 。
代码随想录算法训练营第六天| 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和 。
242.有效的字母异位词
题目链接:力扣题目链接
文章讲解:代码随想录(programmercarl.com)
视频讲解:学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词
状态:AC
思路
方法一:使用
map
即可。键是字母的ASCII
码、值为频率。分别用两个串构建两个map
,再比较两个map
是否相同。方法二:看了卡哥给的代码发现优化空间还是很大的,使用一个
map
即可,存放s
的情况。异位词满足两个条件:- 两个串等长。
- 两个串中字母出现的频率相同。这一点可以用
s
串的map
的value
自减。
代码
1 |
|
1 |
|
349. 两个数组的交集
题目链接:力扣题目链接
文章讲解:代码随想录(programmercarl.com)
视频讲解:学透哈希表,set使用有技巧!Leetcode:349. 两个数组的交集
状态:AC
思路
从求交集可以看出是要使用集合的结构,但是在Go语言中并没有集合,所以我使用了map
(并不是用map模拟set)。map中,键为nums1
的每个元素,值只有三种状态:第一次出现是0
,多次出现是1
,在nums2
也出现过是2
,最后遍历map,找到值为2的key。
利用const和iota模拟枚举类型。
代码
1 |
|
202. 快乐数
题目链接:力扣题目链接
文章讲解:代码随想录(programmercarl.com)
状态:AC
思路
- 构造一个集合,用于存放每一次拆数求平方和的结果
- 拆数
- 判断结果是否是1,如果是
return true
- 如果不是1,判断结果是否在集合中,如果存在则说明出现了循环,
return false
代码
1 |
|
1.两数之和
题目链接:力扣题目链接
文章讲解:代码随想录(programmercarl.com)
状态:AC
思路
- 遍历
nums
将元素存为map
的key
,将元素的索引存放为map
的value
; - 再遍历
nums
,查看target - v
是否在key
中,并返回两个值:nums
元素的索引和map[target-v]
遍历两次还是思路上走弯路了,一次即可。
代码
1 |
|
1 |
|
小结
这次的题目不算很难,做起来就很快,算上写博客的时间不到两个小时
对Go语言的map有了新的理解:
1
2
3
4
5
6test = map[int]int{}
if value, ok := test[key]; ok {
// key存在的情况
} else {
// key不存在的情况
}1
2
3// 使用反射来判断两个map是否相等
import reflect
reflect.DeepEqual(map1, map2)1
2test = map[int]int{}
test[1]-- // 即使不存在1,默认新增键值对{1:0},然后再自减第一次使用Go模拟枚举
1
2
3
4
5const (
A iota
B
C
)
代码随想录算法训练营第六天| 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和 。
https://promisewang.github.io/post/20198d61.html