用Python中的子列表求和运算将一个列表转换为与另一个列表相同的程序

假设我们有两个列表l1和l2,我们必须通过重复应用此操作来使列表相等-选择一个子列表,然后用其总和替换整个子列表。在执行上述操作之后,最后返回可能的最长结果列表的大小。如果没有解决方案,则返回-1。

因此,如果输入像l1 = [1、4、7、1、2、10] l2 = [5、6、1、3、10],那么输出将为4,就像我们执行此操作一样跟随-

  • 取l1的子列表[1,4],我们得到[5,7,1,2,2,10]

  • 取l1的子列表[1,2],我们得到[5,7,3,10]

  • 取l2的子列表[6,1],我们得到[5,7,3,10]。

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

  • i:= 1-1的大小,j:= 2-1的大小,res:= 0

  • 当i> = 0且j> = 0时

    • 如果j> 0,则

    • j:= j-1

    • l2 [j-1]:= l2 [j-1] + l2 [j]

    • 如果i> 0为非零,则

    • 我:=我-1

    • l1 [i-1]:= l1 [i-1] + l1 [i]

    • res:= res + 1,i:= i-1,j:= j-1

    • 如果l1 [i]与l2 [j]相同,则

    • 否则,当l1 [i] <l2 [j]时

    • 否则,当l1 [i]> l2 [j]时,则

    • 如果i与-1相同且j与-1相同,则返回res,否则返回-1

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

    示例

    class Solution:
       def solve(self, l1, l2):
          i, j, res = len(l1) - 1, len(l2) - 1, 0
          while i >= 0 and j >= 0:
             if l1[i] == l2[j]:
                res, i, j = res + 1, i - 1, j - 1
             elif l1[i] < l2[j]:
                if i > 0:
                   l1[i - 1] += l1[i]
                i -= 1
             elif l1[i] > l2[j]:
                if j > 0:
                   l2[j - 1] += l2[j]
                j -= 1
             return res if i == -1 and j == -1 else -1
    ob = Solution()l1 = [1, 4, 7, 1, 2, 10]
    l2 = [5, 6, 1, 3, 10] print(ob.solve(l1, l2))

    输入值

    [1, 4, 7, 1, 2, 10], [5, 6, 1, 3, 10]

    输出结果

    4