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{} }
相关文章推荐
- leetcode刷题笔记(四)[Go语言实现]
- leetcode的python实现 刷题笔记26:删除排序数组中的重复项
- leetcode的python实现 刷题笔记14:最长公共前缀
- leetcode的python实现 刷题笔记28:实现strStr()
- LeetCode刷题笔记792:匹配子序列的单词数(Python实现)
- leetcode的python实现 刷题笔记35:搜索插入位置的暴力解法和优化解法
- Leetcode刷题笔记之 Reverse Integer(python实现)
- LeetCode刷题笔记796:旋转字符串(Python实现)
- LeetCode刷题笔记985:查询后的偶数和(Python实现)
- LeetCode刷题笔记——用队列实现栈(easy)
- leetcode的python实现 刷题笔记27:移除元素
- leetcode的python实现 刷题笔记70:爬楼梯(动态规划)
- LeetCode刷题笔记(Java版)----28、实现strStr()
- LeetCode刷题笔记923:三数之和的多种可能(Python实现)
- LeetCode刷题笔记868:二进制间距(Python实现)
- leetcode的python实现 刷题笔记7: 反转整数
- 【刷题笔记】LeetCode_28:实现strStr()_简单(C)
- leetcode笔记总结——(6)通过四道题,来掌握二叉树的层序遍历。(python3和C++实现)
- LeetCode刷题笔记342:4的幂(Python实现)
- [笔记]Go语言实现同一结构体适配多种消息源