这就是这个问题的算法:编写一个函数,以两个数组作为输入,每个数组包含一个a-Z列表;如果 第二个数组是第一个数组的子集,如果不是,则为False
# Python 3 program to find whether an array
def isSubset(arr1, arr2):
i = 0
for i in range(len(arr2)):
if(arr2[i] not in arr1):
return False
return True
arr1 = ["A", "B", "C", "D", "E", "F"]
arr2 = ["C", "A", "A"]
if(isSubset(arr1, arr2)):
print("arr2[] is a subset of arr1[] ")
else:
print("arr2[] is not a subset of arr1[]")
算法的复杂度为
O(n*k)
,其中n
和k
是数组的长度。在另一个循环中有一个循环,在列表中搜索需要O(n)
您可以优化算法:
在这种情况下,时间复杂度为
O(n+k)
,其中n
和k
是数组的长度。在set
中搜索(并且dict
具有O(1)
时间复杂性)但是在这种情况下,您需要为
set
添加一个额外的空间。因此,新算法具有O(n)
空间复杂度,而原算法具有O(1)
空间复杂度代码的时间复杂度是O(M*N)-,因为您正在搜索
arr1
中是否有一个匹配的项来匹配arr2
中的每个项更好的方法是使用
Count
数组,并在线性时间和恒定空间中求解它此代码的复杂性:
我不会为你写代码,因为这是一个家庭作业问题。我将为您描述一个算法,您应该自己实现它
以
arr1
和arr2
为例,首先通过存储A-Z
的出现次数来预处理arr1
。因此,对于您的arr1
,您应该获得:现在对
arr2
执行同样的操作,您应该得到:现在比较这两个列表中
A-Z
的值,如果arr2
的任何对应值大于arr1
,则程序应返回false
,否则返回true
相关问题 更多 >
编程相关推荐