题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
方法一:
func twoSum(nums []int, target int) []int {
hashTable := map[int]int{}
for i, x := range nums {
if p, ok := hashTable[target-x]; ok {
return []int{p, i}
}
hashTable[x] = i
}
return nil
}
方法二:
func twoSum(nums []int, target int) []int {
for i, x := range nums {
for j := i + 1; j < len(nums); j++ {
if x+nums[j] == target {
return []int{i, j}
}
}
}
return nil
}
方法三:
func twoSum(nums []int, target int) []int {
for(var i int;i=0;i++){
var j int = nums[i]-target
for(var k int;k=i;k++){
if(nums[k]==j) return []int{i,k}
}
}
return nil
}
自上而下内存消耗如图
方法一:
官方推荐的键值对算法,通过运用哈希表组成键值map,实现快速查找,速度最快,但是会有额外的内存消耗。
方法二:
暴力破解法,两层循环嵌套,对每两个数字都进行相加组合,与目标数字比对,速度最慢。
方法三:
使用数组,但是会对目标函数需要查询的值进行一个记录,算是对方法二的一个小优化,内存消耗不变,速度有所提升。(这个不属于官方的解法,自己想的一个小优化,还希望各位可以提供更多想法)。
有疑问加站长微信联系(非本文作者)