两数之和解题记录
开始打算用一个数组保存差值,arr[target-nums[i]] = i, 只要arr[nums[i]]有内容就能满足target,返回arr[nums[i]]和i。但是会出现复数的情况,所以换成map。
换成map就只用一边遍历,一遍检查和存入对应key就行了,value就是index,不用拐着弯儿存。
func twoSum(nums []int, target int) []int {
m := make(map[int]int, len(nums)) // 预分配容量
for i, v := range nums {
if j, ok := m[target-v]; ok {
return []int{j, i}
}
m[v] = i
}
return nil // 返回 nil 比返回空切片更符合 Go 习惯
}