假设我们有两个列表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