用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
以上是 用Python中的子列表求和运算将一个列表转换为与另一个列表相同的程序 的全部内容, 来源链接: utcz.com/z/330833.html