package main
import "fmt"
func main() {
nums := []int{3, 2, 4}
target := 6
result := twoSum(nums, target)
fmt.Println("符合条件的元素索引为", result)
result2 := twoSum2(nums, target)
fmt.Println("符合条件的元素索引为", result2)
}
//暴力算法:时间复杂度O(n^2);空间复杂度:1
func twoSum(nums []int, target int) []int {
if len(nums) < 2 {
return nil
}
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
}
//哈希表算法:时间复杂度O(n);空间复杂度:n -----在go里面,map数据结构就是哈希表的一种实现
func twoSum2(nums []int, target int) []int {
if len(nums) < 2 {
return nil
}
hash := make(map[int]int)
for i := 0; i < len(nums); i++ {
index, ok := hash[target-nums[i]]
if ok {
return []int{index, i}
} else {
hash[nums[i]] = i
}
}
return nil
}
下图为两种算法耗时对比