用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