两数之和

两数之和

给定一个数组和一个目标数,判断数组中是否有两个数的和等于该目标数,如果存在则输出它们在数组中的序号。

解法1:第一眼看到上述题目我们第一时间的反应应该是通过两个循环遍历来找出它们的序号。第一个循环找出一个数X,然后用目标数减去该数值X得到第二个数Y,然后第二次循环找出有没有与Y相等的数值。这样时间的复杂度是O(n²)。

解法2:我们可以通过使用字典的的方式,数值作为字典的key,数组下标作为字典的value。我们可以在第一次便利的时候,用目标数减去循环得到的数X,然后得到目标数Y,然后判断字典中有没有以Y作为key的value。
如果有的话,那么此次循环的i就是第一个数值的下标,以Y作为key那个value就是第二个数值的下标。
如果不存在则将该次循环的下标和数值保存到字典里面。继续下一次遍历。
以下是Swift代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
fileprivate func _sum(_ array:[Int],targetNum:Int)->[Int]{
var dict = [Int:Int]()
for(i,num) in array.enumerated(){
let secondNum = targetNum - num
if let secondIndex = dict[secondNum]{
return [i,secondIndex]
}else{
dict[num] = i
}
}
return [0,0]
}
-------评论系统采用disqus,如果看不到需要翻墙-------------