package main
import (
"fmt"
)
/**
* n的平方时间复杂度
*/
func twoSum(nums []int, target int) []int {
res := make([]int, 0)
breakTag := false
for i:=0;i<len(nums);i++ {
for j:=i+1;j<len(nums);j++ {
if nums[i] + nums[j] == target {
if i != j {
res = append(res, i)
res = append(res, j)
breakTag = true
break
}
}
}
if breakTag {
break
}
}
return res
}
/**
* n时间复杂度, map设置成int切片的原因是避免重复元素
*/
func twoSum1(nums []int, target int) []int {
res := make([]int, 0)
m := make(map[int][]int, 0)
for i:=0; i<len(nums); i++ {
_, ok := m[nums[i]]
if !ok {
m[nums[i]] = make([]int, 0)
}
m[nums[i]] = append(m[nums[i]], i)
}
breakFlag := false
for i:=0; i<len(nums); i++ {
key := target - nums[i]
idxArr, ok := m[key]
if ok {
for _, j := range(idxArr) {
if j!=i {
res = append(res, i)
res = append(res, j)
breakFlag = true
break
}
}
}
if breakFlag {
break
}
}
return res
}
func main() {
nums := make([]int, 0)
nums = append(nums, 1, 2, 3, 4,5,6,7, 8,9)
res := twoSum1(nums, 5)
fmt.Println(res)
}
网友评论