两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
提交用时20ms, 战胜98.48%的swift提交
解题思路:耗费O(n)空间构造哈希表,遍历数组每个元素nums[i],哈希表对应存储<target - nums[i], i>,存储nums[i]期望的“另一半”,一旦哈希表中包含nums[i],代表“另一半”早已存储在哈希表中,直接返回即可;
复杂度分析:时间复杂度O(n),空间复杂度O(n)
class Solution {
func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
var dict: [Int:Int] = [:]
var results: [Int] = Array(repeating: 0, count: 2)
print(results.count)
for (i, item) in nums.enumerated() {
if dict[item] != nil {
print("--\(String(describing: dict[item]!)) -- \(i)")
results[0] = dict[item]!
results[1] = i
break
}
dict[target - item] = i
print("\(target - item)-\(i)")
}
return results
}
}
参考文章:https://segmentfault.com/a/1190000009428229
http://www.runoob.com/java/java-map-interface.html