Go-两数之和
给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 的那 两个整数,并返回它们的数组下标
方法一
分析:(暴力法)
先用nums里的第一个数 去分别和后面的几个数相加,看结果是否等于target,如果没有,继续去拿nums里的第二个数 去分别和这个数的后面的几个数相加,看结果是否等于target,如果没有,就继续第三个…直到两数相加等于target时,分别取这两个数的下标返回。
方法二
分析:
用target - nums[i]得到两个数的差值,如果这个差值nums里有,就返回这两个数的下标。
package main
import "fmt"
// 给定一个整数数组 nums 和一个整数目标值 target
// 请你在该数组中找出 和为目标值 的那 两个整数,并返回它们的数组下标
func main() {
target := 9
nums := [4]int{11, 12, 7, 2}
r1 := f1(nums, target)
fmt.Println(r1)
r2 := f2(nums, target)
fmt.Println(r2)
}
// 方法一
// 暴力法
func f1(nums [4]int, target int) [2]int {
result := [2]int{}
for i := 0; i < len(nums); i++ {
for j := i + 1; j < len(nums); j++ {
sum := nums[i] + nums[j]
if sum == target {
result[0] = i
result[1] = j
}
}
}
return result
}
// 方法二
// target-nums[i]的值如果nums里有,就返回这两个值的下标
func f2(nums [4]int, target int) [2]int {
result := [2]int{}
for j := 0; j < len(nums); j++ { //先循环计算差值:target-nums[j]
for i := 0; i < len(nums); i++ { //循环找与这个差值相同的值
if nums[i] == target-nums[j] {
result[0] = i
result[1] = j
}
}
}
return result
}