两数字和
- 第一种解法
暴力直接两重循环,第一个循环负责遍历值,第二个循环负责找另外一个值
循环从第一个数的后面一个数开始
时间复杂度为O(n^2)
func twoSum(nums []int, target int) []int {
for i := 0;i < len(nums);i++ {
for j:= i + 1;j < len(nums);j++{
other := target - nums[i]
if nums[j] == other {
return []int{i,j}
}
}
}
return nil
}
//暴力循环两次
- map解法
我们定义一个map集合,它的键用来存储值,map键对应的值用来存储目标值对应的下标
顺序扫描数组,对每一个元素,在 map 中找能组合给定值的另一半数字,如果找到了,直接返回 2 个数字的下标即可。如果找不到,就把这个数字存入 map 中,等待扫到“另一半”数字的时候,再取出来返回结果。
func twoSum(nums []int, target int) []int {
a := make(map[int]int)
for i := 0; i < len(nums);i++ {
other := target - nums[i]
if _,ok := a[other];ok {
return []int{a[other],i}
}
a[nums[i]] = i
}
return nil
}