代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集、202. 快乐数、1. 两数之和
242.有效的字母异位词
题目链接:242.有效的字母异位词
思路
看了题解思路之后,学习了一下for…range语句的规则,其基本语法为:
for index,value := range array{
...
}
其中,有几点注意如下:
- index和value为for循环内部可见的局部变量;
- array为待遍历的数组名字,index和value分别对应遍历数组的下标和值。
本题的思路主要是利用连续的小写英文字母组成的哈希表,在s序列中出现对应字母则数量加一,在t序列中出现则数量减一。判断该哈希表最后是否为空数组,如果空,则true,否则false。
解题代码
func isAnagram(s string, t string) bool {
//1.定义新数组
record := [26]int{}
//2.使用for-range语句遍历数组
for _,value := range s{
record[value-rune('a')]++ //每个字母减去a对应的值为record的下标,我们要使其加1
}
for _,value := range t{
record[value-rune('a')]-- //对应的,存在即减去
}
var ans bool //更简单的写法 直接return record==[26]int{}
if record == [26]int{} {
ans = true
}else{
ans = false
}
return ans
}
349. 两个数组的交集
题目链接: 349. 两个数组的交集
思路
涉及到的知识有:map的定义与分配内存、map的增删查、if _,ok语句的使用。
var newMap map[int]int //定义: var map名 map[keyType]valueType
newMap = make(map[int]int,10) //分配内存
//如果key在map里,value被赋值为map[Key],ok为true
if value,ok := map[key]; ok{
//...
}
题解思路为:
- 用一个map,存放nums1里有的值;
- 一个res作为交集
- 遍历nums1,把值放进map里
- 遍历nums2,查验map里是否有对应的值,如果有,则把值放进res,在map里删去该值
解题代码
func intersection(nums1 []int, nums2 []int) []int {
set:=make(map[int]struct{},0) // 用map模拟set 定义一个map并分配内存
res:=make([]int,0)
for _,v:=range nums1{ //遍历nums1
if _,ok:=set[v];!ok{ //查找set里有没有值为v的,如果没有,则进入下面操作
set[v]=struct{}{} //用一个空结构体放v
}
}
for _,v:=range nums2{
//如果存在于上一个数组中,则加入结果集,并清空该set值
if _,ok:=set[v];ok{ //set里有没有值为v的,如果有,进入下面操作
res=append(res,v) //在res里放入这个值
delete(set, v) //在set里删去这个值
}
}
return res
}
202. 快乐数
题目链接:202. 快乐数
思路
需要通过哈希的方法,给计算过的n增加一个标识,比如用true标记,这样如果循环到该n的时候,可以跳出,返回false
解题代码
func isHappy(n int) bool {
m := make(map[int]bool)
for n != 1 && !m[n] {
n, m[n] = getSum(n), true
}
return n == 1
}
func getSum(n int) int {
sum := 0
for n > 0 {
sum += (n % 10) * (n % 10)
n = n / 10
}
return sum
}
1. 两数之和
题目链接:1. 两数之和
思路
这题关于map的用法,我还要再消化一下
解题代码
func twoSum(nums []int, target int) []int {
m := make(map[int]int)
for index, val := range nums {
if preIndex, ok := m[target-val]; ok {
return []int{preIndex, index}
} else {
m[val] = index
}
}
return []int{}
}
文章介绍了四道算法题目的解题思路和代码实现,包括验证字母异位词的有效性、找到两个数组的交集、判断快乐数以及解决两数之和的问题。解题方法主要利用哈希表和数组操作,如for-range循环、map的增删查等。

被折叠的 条评论
为什么被折叠?



