day01

题目

Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1]

在数组中找到 2 个数之和等于给定值的数字,结果返回 2 个数字在数组中的下标

代码

# go
func twoSum(nums []int, target int) []int{
  m:=make(map[int]int)
  for i := 0; i<len(nums);i++{
    another := target - nums[i]
    if _,ok:=m[another];ok{
      return []int{m[another], i}
    }
    m[nums[i]] = i
  }
  return nil
}

# python
def twoSum(nums, target):
    numDic = {}
    for i in range(len(nums)):
        another = target - nums[i]
        if numDic.get(another) != None:
            return [numDic[another], i]
        numDic[nums[i]] = i

题解思路

首先大体解题思路是,拿给定的一个值减去切片中的值得到的另外一半,看在不在map中,不在的话就把当前被减数和索引存到map中,
下次如果之前的另外一半成了被减数,那么得到的结果就是之前已经存在map中的值,此时从map取出该结果对应的索引,即为结果的索引下标,
而循环的索引即为当前被减数的值所对应的索引。

所以,我们首先定义了一个函数,
函数参数接收一个int类型的切片和一个int类型的和,函数返回值类型同为int类型的切片
func twoSum(nums []int, target int) []int

然后定义了一个map,该map用来存储被减数或结果的值与索引。make初始化
m:=make(map[int]int)

循环切片
for i := 0; i<len(nums);i++

拿给定的和减去上面每次循环得到的索引下标对应的切片中的值得到另外一半
another := target - nums[i]

然后判断另外一半在不在map中,如果在则返回另外一半的索引和当前被减去值的索引
if _,ok:=m[another];ok{
      return []int{m[another], i}
    }

不在map中,nums[i]得到的切片中的值作为map的key,循环的索引作为值添加到map中
m[nums[i]] = i
posted @ 2022-01-29 15:10  我在路上回头看  阅读(22)  评论(0编辑  收藏  举报