您的位置:首页 > 编程语言 > Go语言

leetcode刷题笔记(一)[Go语言实现]

2021-08-18 15:14 1151 查看

leetcode刷题笔记(一)

1. 两数之和

暴力解法:

遍历所有两两组合的方式。

func twoSum(nums []int, target int) []int {
for i, num := range nums {
for j := i + 1; j < len(nums); j++ {
if num+nums[j] == target {
results := []int{i, j}
return results
}
}
}
var a []int
return a
}

节约时间的方法:

核心思想是,创建了一个map,然后将输入数组遍历。如果map中未存在(target-当前遍历值val)的key,则将当前的遍历扫描到的数字,放入map的key中,index存入value中。进行下一轮循环,直到遇到map中存在(target-当前遍历值val)的key时,因为target-val==map中存在的那个key。

map存储的内容是[val] [index],前者是数组扫描到的数字,后者是其对应的下标。

我们每一轮循环,判断此时遍历到的数字与map中可能存在的某个key相加是否等于target。如果map中没有这样的数字,则把自己存入到map[val] [index]中,直到我们map存在key和遍历到的数字相加==target。此时我们返回map中对应key的value以及nums遍历到的下标。

因为map key索引结构是顺序的,map中的key长度是慢慢增长的,且对应value寻址方式简单快速的原因,要比两重循环的暴力遍历所有组合的情况要快很多。

func twoSum(nums []int, target int) []int {
//定义map m
m := make(map[int]int)
//遍历nums数组
for index, val := range nums {
//map[目标值-数组值]赋值给preIndex,如果存在map的这个key,返回preIndex和当前遍历下标
//这里val+(target-val)=target,即map存在某个key和val相加等于target,我们就返回二者下标
if preIndex, ok := m[target-val]; ok {//m[7]
return []int{preIndex, index}
} else {
//否则,则map[遍历时的值]等于当前遍历下标
m[val] = index//m[2]
}
}
return []int{}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: