代码随想录算法训练营第六天 | 242、349、202、1

242. 有效的字母异位词

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

func isAnagram(s string, t string) bool {
if len(s) != len(t) {
return false
}
var count [26]int
for _, ch := range s {
count[ch-'a']++
}
for _, ch := range t {
count[ch-'a']--
}
for _, c := range count {
if c != 0 {
return false
}
}
return true
}

349. 两个数组的交集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

func intersection(nums1 []int, nums2 []int) []int {
// 使用 map 存储 nums1 中的元素,实现去重
numSet := make(map[int]bool)
for _, num := range nums1 {
numSet[num] = true
}

// 遍历 nums2,找出交集元素并去重
var result []int
for _, num := range nums2 {
if numSet[num] {
result = append(result, num)
delete(numSet, num) // 避免重复添加
}
}
return result
}

202. 快乐数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

func isHappy(n int) bool {
seen := make(map[int]bool)
for n != 1 && !seen[n] {
seen[n] = true
n = getNext(n)
}
return n == 1
}

func getNext(n int) int {
sum := 0
for n > 0 {
digit := n % 10
sum += digit * digit
n /= 10
}
return sum
}

1. 两数之和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

func twoSum(nums []int, target int) []int {
numMap := make(map[int]int) // 创建哈希表存储值到索引的映射
for i, num := range nums { // 遍历数组
complement := target - num
if idx, exists := numMap[complement]; exists { // 检查补数是否存在
return []int{idx, i} // 找到解立即返回
}
numMap[num] = i // 将当前元素存入哈希表
}
return nil // 根据题意此处不会执行
}