Python 使用函数式编程风格查找两个排序数组的相同元素计数
例如: 给定nums1=[1,2,3,4],nums2=[2,3],返回2 我有使用python的命令式解决方案,算法复杂度为Om+n:Python 使用函数式编程风格查找两个排序数组的相同元素计数,python,functional-programming,Python,Functional Programming,例如: 给定nums1=[1,2,3,4],nums2=[2,3],返回2 我有使用python的命令式解决方案,算法复杂度为Om+n: def sameElementsCount(nums1, nums2): count = 0 len1 = len(nums1) len2 = len(nums2) i = 0 j = 0 while i < len1 and j < len2: if nums1[i] == nums
def sameElementsCount(nums1, nums2):
count = 0
len1 = len(nums1)
len2 = len(nums2)
i = 0
j = 0
while i < len1 and j < len2:
if nums1[i] == nums2[j]:
count += 1
i += 1
j += 1
elif nums1[i] < nums2[j]:
i += 1
else:
j += 1
return count
print sameElementsCount([1,2,3,4], [2,3])
如何使用高阶函数(如map/filter/reduce)进行函数编程。确保
算法复杂度为Om+n你可以使用集合交集:lensetnum1和setnum2在一些文章中给出的答案lensetnum1和setnum2写起来很快,但它在只需要其基数时计算实际的集合交集。此外,它没有强调函数式编程风格的任何使用 以下行为与您的程序完全相同,但具有函数式编程风格: while循环被转换成一个递归函数,计数器被分解,以允许在列表上进行模式匹配
def sameElementsCount(nums1, nums2):
len1 = len(nums1)
len2 = len(nums2)
if len1 == 0 or len2 == 0:
return 0
elif nums1[0] == nums2[0]:
return 1+sameElementsCount(nums1[1:],nums2[1:])
elif nums1[0] < nums2[0]:
return sameElementsCount(nums1[1:],nums2)
else:
return sameElementsCount(nums1,nums2[1:])
print sameElementsCount([1,2,3,4], [2,3])
我不确定哪些高阶函数适合您的方法,但正如python的zen所说,简单比复杂好,您可以尝试使用lensetnums1和SetNums2,这是两个列表的隐含要求吗?