在 Python 中查找运行长度编码向量的点积的程序
假设我们有两个列表nums1和nums2。这两个列表中的每一个都以游程长度编码形式表示一个向量。例如,向量[1,1,1,2,2,2,2]表示为[3,1,4,2]。(因为有3个一和4个二)。所以我们必须找到这两个向量的点积。(点积是两个向量中存在的项目的元素乘法之和)。
因此,如果输入类似于nums1=[2,7,5,3]nums2=[3,5,4,2],那么输出将是109,因为向量类似于[7,7,3,3,3,3,3]•[5,5,5,2,2,2,2]=7*5+7*5+3*5+3*2+3*2+3*2+3*2=35+35+15+6+6+6+6=109。
示例
让我们看看以下实现以获得更好的理解-
def solve(nums1, nums2):
ans = 0
while nums1 and nums2:
val1 = nums1.pop()
count1 = nums1.pop()
val2 = nums2.pop()
count2 = nums2.pop()
ans += (val1 * val2) * min(count2, count1)
if count2 > count1:
nums2.append(abs(count2 - count1))
nums2.append(val2)
elif count1 > count2:
nums1.append(abs(count2 - count1))
nums1.append(val1)
return ans
nums1 = [2, 7, 5, 3]
nums2 = [3, 5, 4, 2]
print(solve(nums1, nums2))输入
[2, 7, 5, 3], [3, 5, 4, 2]输出结果
109