LeetCode1. 两数之和
1. 两数之和
给定一个整数数组 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 {
sumMap := make(map[int]int)
for i := 0; i < len(nums); i++ {
if c, ok := sumMap[target-nums[i]]; ok {
return []int{c, i}
}
sumMap[nums[i]] = i
}
return []int{-1,-1}
}
官解
//用map辅助查找 时间复杂度O(n)
func func2(s []int, tag int) []int {
hash := make(map[int]int)
for i := 0; i < len(s); i++ {
hash[s[i]] = i
}
for i := 0; i < len(s); i++ {
temp := tag - s[i]
if _, ok := hash[temp]; ok {
if hash[temp] == i {
continue
}
return []int{i, hash[temp]}
}
}
return nil
}
Me
这个在面试时就是错误解法!!!
go语言实现版本
func twoSum(nums []int, target int) []int {
for i:=0; i<len(nums);i++ {
for j:=i+1; j<len(nums);j++ {
if (nums[i]+nums[j]) == target {
return []int{i,j}
}
}
}
return nil
}