Two Sum

题目

Two Sum

分析

  1. 数组没说是有序的
  2. 乍一看只有O(N^2)的算法。
  3. 不能进行排序,会破坏索引值。
  4. 数组中的元素会重复(样例中有[3,3]这个数据)

Python语法

  1. 排序
    list.sort()会改变list本身
    sorted(list)不改变list本身,形成一个新的list
  2. 同时获取List的值与索引
list = [2, 7, 5, 9]
for index, item in enumerate(list):
    print(index, item)
  1. List添加元素
  • append()
a = [1,2,3]
b = [3,4,5]
a.append(b)
print(a)
# [1, 2, 3, [3, 4, 5]]
  • extend()
a = [1,2,3]
b = [3,4,5]
# a.append(b)
a.extend(b)
print(a)
# [1, 2, 3, 3, 4, 5]

代码

我的代码

直接双重循环,时间复杂度N^2

哈希表

  • 思路
    已知一个值i,找到另一个值等于target-i的时间复杂度是O(n)。可以建立一个Hash表,将O(n)降低到O(1)。可以在近乎于常数时间内找到所要的值(前提是没有发生Hash碰撞,本题不会发生)。
  • 缺点
    开辟了额外的存储空间
def twoSum(nums, target):
    '''
    for index_i, i in enumerate(nums):
        # print(index_i, i)
        for index_j, j in enumerate(nums):
            if i + j == target and index_i != index_j:
                l = []
                l.append(index_i)
                l.append(index_j)
                return l
    '''
    dict = {}
    l = []
    for index, i in enumerate(nums):
        dict[i] = index
    for index,i in enumerate(nums):
        number = target - i
        if number in dict.keys() and dict[number] != index:
            l.append(index)
            l.append(dict[number])
            return l

L = [3,2,4,5,6,7,8]
print(twoSum(L, 6))

你可能感兴趣的:(Two Sum)