在Python中查找运行长度编码向量的点积的程序

在Python中查找运行长度编码向量的点积的程序

假设我们有两个列表nums1和nums2。这两个列表都表示以运行长度编码形式表示的向量。例如,向量[1,1,1,2,2,2,2]表示为[3,1,4,2]。(因为有3个1和4个2)。因此,我们必须找到这两个向量的点积。(点积是在两个向量中存在的项的元素乘法的总和)。

因此,如果输入为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。

要解决这个问题,我们将遵循以下步骤-

  • ans:= 0
  • while nums1和nums2都非空,执行以下操作
    • val1:=从nums1的最后一个元素,然后删除最后一个元素
    • count1:=从nums1的最后一个元素,然后删除最后一个元素
    • val2:=从nums2的最后一个元素,然后删除最后一个元素
    • count2:=从nums2的最后一个元素,然后删除最后一个元素
    • ans:= ans +(val1 * val2)*(count2和count1的最小值)
    • 如果count2> count1,然后
      • 在nums2的末尾插入| count2-count1 |
      • 在nums2的末尾插入val2
    • 否则,当count1> count2时,则
      • 在nums1的末尾插入| count2-count1 |
      • 在nums1的末尾插入val1
  • 返回ans

示例

让我们看看以下实现以更好地理解-

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程