给定一个整数数组
nums
和一个目标值target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
答案:
//解法一 func TwoSum(nums []int,target int)[]int{ //暴力算法,通过两次循环找到想要的值 //时间复杂度为n的平方 l := len(nums) for i:=0;i<l-1;i++{ for j:=i+1;j<l;j++{ if nums[i]+nums[j] == target{ return []int{i,j} } } } return []int{} } //解法2 func TwoSum1(nums []int,target int )[]int{ //运用map, //将数组键值交换存入map,默认没有重复值 map1 := make(map[int]int) for k,v := range nums{ map1[v] = k } //遍历查看数组 for i := 0 ;i < len(nums);i++ { k1 := target - nums[i] //判断所需要的值是否在map1中 //存在并且索引值并且索引值不一样就是结果 if _,ok := map1[k1];ok && map1[k1] != i{ return []int{i,map1[k1]} } } return []int{} } //解法3 func TwoSum2(nums []int,target int )[]int{ map1 := make(map[int]int) //遍历数组 for k,v := range nums{ //获取需要的值 v1 := target - v //需要的值不在map1中就将这次循环的存入map,若是在就就输出index //值和键反着存 if _,ok := map1[v1]; !ok{ map1[v] = k }else{ return []int{map1[v1],k} } } return []int{} }