题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
解题思路:
哈希表法
通过以空间换取速度的方式,我们可以将查找时间从 O(n) 降低到 O(1)。哈希表正是为此目的而构建的,它支持以近似恒定的时间进行快速查找。
我们可以将每个元素的值和它的索引添加到哈希表中,然后在遍历时检查每个元素对应的目标元素(target - nums[i])是否存在于表中。
注意⚠️,该目标元素不能是 nums[i] 本身!
//go func twoSum(nums []int, target int) []int { result := make([]int, 0) m := make(map[int]int) for i,k := range nums{ // 判断map中是否存在key为[target - k]的值 if value,exist := m[target - k];exist && value != i{ // append:尾部追加元素 result = append(result,value) result = append(result, i) } m[k] = i } return result }
地址:https://mp.weixin.qq.com/s/sTicB9IgCZxVhe53j7nsCA