题目来源:leetcode 1. 两数之和
很简单的一道题,哈希思想不熟练的,第一反应可能是两重循环遍历,时间复杂度O(n^2)。
但是,更好的解法其实是
-
构建一个数组map,key是nums中的值
-
遍历nums数组,每次用target-num
-
map[target-num]存在,则直接返回两个数即可
时间复杂度O(n),最坏情况下也只是把整个数组遍历一遍
题目不难,但是考验哈希的应用小技巧
func twoSum(nums []int, target int) []int {
var result []int;
// create map
numMap := make(map[int]int)
for key, num := range nums {
numMap[num] = key
}
other := 0
for key, num := range nums {
other = target - num
// key != otherKey : Duplicate removal
if otherKey, ok := numMap[other]; ok && key != otherKey {
result = []int{key, otherKey}
return result
}
}
return result
}