Description:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Here is a Python solution in O(n) time
Solution from: https://leetcode.com/problems/two-sum/#/solutions
class Solution(object):
def twoSum(self, nums, target):
if len(nums) <= 1:
return False
buff_dict = {}
for i in range(len(nums)):
if nums[i] in buff_dict:
return [buff_dict[nums[i]], i]
else:
buff_dict[target - nums[i]] = i
Update: Golang language
//使用 range 函数
func twoSum(nums []int, target int) []int {
m := make(map[int]int)
for i, v := range nums {
if j, ok := m[target - v]; ok {
return []int{j, i}
} else {
m[v] = i
}
}
return []int{-1, -1}
}
运行效果截图:
题目要求的时间复杂度为O(n),如果使用我们传统的循环加数与被加数此时的时间复杂度就是O(n2),但是如果利用Dict属性建立hash 表就很简单的了。其主要思想是从list 里面配合target做循环内部构建hash table,在循环条件中遍历hash 表,因为整个时间复杂度来自于hash table的遍历,因此时间复杂度为O(n)。