https://leetcode.cn/problems/two-sum/
解题思路:
一、时间复杂度O(n*n),空间复杂度O(n)
暴力枚举:
用两个for循环去遍历nums数组,第一个for循环从数组的第i个元素开始遍历x,第二个for循环从数组的第i+1个元素开始遍历直到查找到值为target-x的元素时,返回x和target-x所在的位置下标。
func twoSum(nums []int, target int) []int {
for i,x:=range nums{
for j:=i+1;j<len(nums);j++{
if x+nums[j]==target{
return []int{i,j}
}
}
}
return nil
}
二、时间复杂度O(n),空间复杂度O(n)
创建一个哈希表用来标记nums数组,for循环遍历数组nums。
若哈希表里没有target-x的值,则将此时遍历到的元素x标记到哈希表;若哈希表里有找到target-x的值,则返回x,target-x的数组元素下标
func twoSum(nums []int,target int) []int {
hashTable:=map[int]int{}
for i,x:=range nums{//i是数组下标,x是值
if p,ok:=hashTable[target-x];ok{
return []int{p,i}
}
hashTable[x]=i
}
return nil
}