在 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