两数之和

最简单的解法,暴力枚举

1
2
3
4
5
6
7
8
9
10
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 []int{}
}

时间复杂度: O(n2)

空间复杂度: O(1)

使用hash map

本质上是为了加快找到target-x的索引的速度

1
2
3
4
5
6
7
8
9
10
11
func twoSum(nums []int, target int) []int {
hashTable:=make(map[int]int)
//去找是否存在target-x
for k1,v:=range nums{
if k2,ok:= hashTable[target-v];ok{
return []int{k2,k1}
}
hashTable[v] = k1
}
return []int{}
}

时间复杂度:O(n)

其中 n 是数组中的元素数量。对于每一个元素 x,我们可以 O(1)O(1)O(1) 地寻找 target - x。

空间复杂度: O(n)

主要是哈希表的开销

文章作者: Luis
文章链接: https://warrest.github.io/2020/10/31/%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Luis's Blog