代码如下
func intersection(nums1 []int, nums2 []int) []int {
m := make(map[int]int) //定义一个map
for _, v := range nums1{ //遍历nums1数组,将nums1里的值作为m的键值,例如,如果nums1里有一个元素2,那么这段代码就会变为m[2] = 1 ,而nums1中的重复元素只会被记录一次
m[v] = 1
}
var res []int //定义一个结果数组
for _, v := range nums2 { //遍历第2个数组
count,ok := m[v] //如果nums2里的元素在nums1里出现过,那么此时count的值会变为1,ok会变为true 。m[v]会返回两个值,一个是键值,另一个则是表示是否出现过得bool值
if ok && count > 0 { //判断ok是否为真,且count > 0 ,如果条件成立,那么就说明该元素出现过,把这个值放入结果中
res = append(res,v)
m[v]-- //并且要将这个键值减1
}
}
return res
}
202 快乐数
代码如下
func isHappy(n int) bool {
m := make(map[int]bool) //设置一个map
for n != 1 && m[n] == false { //如果这个数没有出现过,或者是这个数不等于1 则继续循环
m[n] = true //将这个数设置为出现过
n = getsum(n) //并将这个数字每个位置平方然后相加
}
if n == 1 {
return true
}else {
return false
}
}
func getsum(n int)int {
sum := 0
for n > 0 {
sum += (n % 10)*(n % 10)
n = n / 10
}
return sum
}
1 两数之和
代码如下
func twoSum(nums []int, target int) []int {
m := make(map[int]int)
//思路是如果遇到一个值,将目标值与该值相减,如果目标值与该值相减的值存在,则输出结果
for index ,val := range nums {
preindex,ok := m[target-val] //记录与该值相加等于目标值的值是否存在
if ok == true { //如果存在,返回结果
return []int{preindex,index}
}else {
m[val] = index //如果不存在,则记录该值
}
}
return []int{}
}