package main import "fmt" /** 1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 */ func main() { array := []int{2, 7, 11, 15} target := 9 res := twoSum2(array, target) fmt.Println(res) } //暴力方法 func twoSum(nums []int, target int) []int { for i := 0; i < len(nums)-1; i++ { for j := i + 1; j < len(nums); j++ { if nums[i]+nums[j] == target { return []int{i, j} } } } return nil } //哈希表法 //slice [ 1, 3, 4, 6] //slice index 0 1 2 3 //map key 3, 1, 6, 4 //map value 1, 0, 3, 2 func twoSum2(nums []int, target int) []int { tmp := make(map[int]int) for k, v := range nums { if value, ok := tmp[target-v]; ok { return []int{value, k} } else { tmp[v] = k } } return nil }