1. 两数之和 变形题(数组有重复数字,需要输出所有符合要求的数字对)

143 阅读1分钟
func twoSum(nums []int, target int) [][]int {
    // 如果是先存hash再遍历就会出现找到自己重复的情况,比如[3,2,4],6。进去之后先是3,然后target-v=3,所以返回0,0了
    var res [][]int
    // 修改map的v变为[]int,放多个索引
    hash := map[int][]int{}
    for i, v := range nums {
       if p, ok := hash[target-v]; ok {
          // 遍历索引[]int
          for _, b := range p {
             res = append(res, []int{nums[i], nums[b]})
          }
       }
       // 之前有就append
       if _, ok := hash[v]; ok {
          hash[v] = append(hash[v], i)
       } else {
          // 没有就赛第一个值
          hash[v] = []int{i}
       }
    }
    return res
}