1. 两数之和
题目大意:给出一个数字的数 []num,一个目标值 target。在数组中,找出两数之和为目标值的下标,任意输出一个答案。
例子:num[] = {0, 2,3, 4, 2}, target = 4, 输出:[]int{0,3}
注意点:1. 不能重复,如上不能为 []int{1,1} ,2.注意数组中重复数字处理
首次代码:
mp记录一下 value, target-value 对应的 index
repeat 记录首次出现的index,mp则是第二次出现的 index
(我怎么可以写的这么复杂?)
func twoSum(nums []int, target int) []int { mp := make(map[int]int, 0) repeat := make(map[int]int, 0) for k, v := range nums { if _, ok := mp[v]; ok { repeat[v] = mp[v] } mp[v] = k } for _, v := range nums { k1, ok1 := mp[v] k2, ok2 := mp[target-v] k3, ok3 := repeat[v] if ok1 && ok2 && (k1 != k2 || ok3) { if (ok3) { return []int{k1, k3} } return []int{k1, k2} } } return []int{} }
标准代码:
func twoSum(nums []int, target int) []int { hashTable := make(map[int]int, 0) for k, v := range nums { // 加个简单的判断 当前v是否与之前出现过的匹配,如果匹配,返回,不匹配,记录到hashmap中 if v2, ok := hashTable[target-v]; ok { return []int{k, v2} } hashTable[v] = k } return nil }
标签:return,target,记录,int,nums,Golang,k1,HOT100,mp From: https://www.cnblogs.com/test1024/p/17747750.html