1. 两数之和 two-sum
题目:
给定一个整数数组 nums 和一个整数目标值 target,
请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
解法:
解此题共有两种方法:
- (1)暴力算法
- (2)查找表法
而查找表法又分为:
- 1.1 哈希表 --- 不需要维护顺序
- 1.2 平衡二叉树搜索 --- 需要维护顺序
这里不需要维护返回的顺序,所以最优的方法是哈希表法
哈希表法: 在一次遍历时记录信息,省去时间,以空间换时间。在一次循环中执行多步信息
答案:
本题中是将通过验证Target-value是否存在于map中,以得到是否两数相合等于Target 在Map中,Key中存放的是num中未匹配成功的值,而Value中存的是值在num中的下标i
func twoSum(nums []int, target int) []int {
//新建map
hashmap :=make(map[int]int)
//开始循环
for i,value := range nums{
targetNum:=target - value
//检验hashmap中是否有target,若ok为true,则找到结果,返回targetIndex与i
targetIndex,ok := hashmap[targetNum]
if ok {
return []int{targetIndex,i}
}else{ //否则将num-value存到map-Key中,而下标num-i存到map-value中
hashmap[value] = i
}
}
return []int{}
}