题面
给出一个整数数组,请在数组中找出两个加起来等于目标值的数,
你给出的函数 twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于 index2.。
注意:下标是从 1 开始的 假设给出的数组中只存在唯一解
例如:
给出的数组为 {20, 70, 110, 150}, 目标值为 90
输出 index1=1, index2=2
分析
暴力破解双层循环
确保使用的哈希,在查询之后收录当前索引位
哈希实现
一次循环解决哈希读写,递增索引查询
func twoSum( numbers []int , target int ) []int {
m := make(map[int]int,0)
for i,v := range numbers {
if idx, ok := m[target-v];ok{
return []int{idx,i+1}
}
m[v]=i+1
}
return nil
}
暴力破解
func twoSum( numbers []int , target int ) []int {
for i:=0;i<len(numbers);i++ {
for j:=i+1;j<len(numbers);j++{
if numbers[i] + numbers[j] == target {
return []int{i+1,j+1}
}
}
}
return nil
}
数对和
找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对
输入: nums = [5,6,5], target = 11
输出: [[5,6]]
哈希查询成功,当前循环变量数不入哈希,对应哈希计数减记
func pairSums(nums []int, target int) [][]int {
rs := [][]int{}
m := make(map[int]int, 0)
for _,v := range nums{
if cnt,ok := m[target-v];ok && cnt > 0{
rs = append(rs, []int{target-v, v})
m[target-v]--
}else{
m[v]++
}
}
return rs
}