题目
分析
- 数组没说是有序的
- 乍一看只有O(N^2)的算法。
- 不能进行排序,会破坏索引值。
- 数组中的元素会重复(样例中有[3,3]这个数据)
Python语法
- 排序
list.sort()
会改变list本身
sorted(list)
不改变list本身,形成一个新的list - 同时获取List的值与索引
list = [2, 7, 5, 9]
for index, item in enumerate(list):
print(index, item)
- 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))
网友评论