【发布时间】:2020-08-17 12:45:50
【问题描述】:
给定一个数组 A 和 B。根据数组 A 定义的顺序对 B 进行排序。B 是数组 A 的子集。 例如:
Input:
a = [52,23,34,1,98,2,57,6,12,89,176,45, 90, 35 ]
b = [12,52,1,35]
Output = [52, 1, 12, 35]
解释- 因为 52 在数组 A 中排在第一位,因此我们先打印它,然后是 1,依此类推...
解决方案1在python3中使用Hashmap/dictionary:
a = [52,23,34,1,98,2,57,6,12,89,176,45, 90, 35 ]
b = [12,52,1,35]
d ={}
j =0
for i in b:
d[i]= j
j = j+1
for i in a:
if i in d:
print(i)
使用数组的解决方案 2:
a = [52,23,34,1,98,2,57,6,12,89,176,45, 90, 35 ]
b = [12,52,1,35]
for i in a:
if i in b:
print(i)
所以我的问题是解决方案 1 和解决方案 2 的时间复杂度不同吗? 还是 O(n^2) 对于这两种解决方案......或者是解决方案 1 的 O(n) 和解决方案 2 的 O(n^2) ......还是任何其他复杂性
【问题讨论】:
-
技术上您的第一个解决方案是显示 O(n+m) 或 O(2n),因为第一个循环需要 n 次迭代,第二个循环需要 m,然后是时间复杂度为 O(n + m),而第二种解决方案仅为 O(n)。
-
但是解决方案 2 中的 IF 语句不是 O(n) 复杂的.. 因为 If 基本上是在列表中搜索..@FishingCode
-
如果是嵌套的 for 循环,则为 O(n^2),但事实并非如此。在
b中找到该元素的最佳情况是 O(1) 但最坏情况是 O(n) 大小 n 常数。
标签: python arrays dictionary time-complexity