这段代码实现了一个函数 twoSum,它接收一个整数数组 nums 和一个目标整数 target,并返回两个数组元素的下标索引,这两个元素之和等于目标整数。如果没有找到这样的一对元素,则返回 nil。
函数首先初始化一个空 map(哈希表) m,用于存储每个数组元素及其对应的下标索引。然后使用 for 循环遍历数组中的每个元素。在循环内部,计算当前元素与目标整数之差 another,并检查 map 中是否已经存在 another 的键值对。
如果存在,则说明在当前元素之前已经有一个元素与 another 的和为 target,直接返回这两个元素的下标索引即可。否则,将当前元素及其下标索引加入 map 中,以便后续查找。
最后,如果无法找到符合要求的元素组合,就返回 nil。
值传递是一个拷贝的过程
Go:值传递
func bbb(list [4]int){
for i,_ := range list{
list[i] = 0
}
}
func main(){
list := [4]int{1,2,3,4}
bbb(list)
fmt.Println(list ) //[1 2 3 4]
}
Javascript: 引用传递
let list = [1,2,3,4]
function bbb(list){
list.forEach((item,index)=>{
list[index] = 0
})
}
bbb(list)
console.log(list) //[0,0,0,0]
但是Go语言可以通过指针来实现引用传递的作用
func bbb(p2 *[4]int){ //接受一个[4]int的指针
for i,_ := range p2{
p2[i] = 0
}
}
func main(){
list := [4]int{1,2,3,4}
p := &list
bbb(p) //传递指针
fmt.Println(list ) //[0 0 0 0]
}
既然说go语言的参数传递只能是值传递,所以这里实际上是把指针地址拷贝了一份,而两个地址都指向了main函数的变量list的地址,所以才使list的值发生了改变