最简单的解法,暴力枚举
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) 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)
主要是哈希表的开销