程序以查找严格制作列表所需的最少操作数python中增加
假设我们有两个数字列表,称为A和B,它们的长度相同。现在考虑我们可以执行一个可以交换数字A[i]和B[i]的操作。我们必须找到使两个列表严格增加所需的操作数。
因此,如果输入像A=[2,8,7,10]B=[2,4,9,10],那么输出将为1,因为我们可以在A中交换7而在B中交换9。列表将类似于A=[2,8,9,10]和B=[2,4,7,10],它们都是严格增加的列表。
为了解决这个问题,我们将遵循以下步骤:
定义一个功能dp()
。这需要我,prev_swapped
如果A的大小与i相同,则
返回0
否则当我等于0时
返回dp(i+1,False)和1+dp(i+1,True)的最小值
除此以外,
ans:=dp(i+1,False)
如果A[i]>prev_B和B[i]>prev_A,则
返回ans
ans:=ans的最小值,1+dp(i+1,True)
返回1+dp(i+1,真)
交换prev_A和prev_B
prev_A:=A[i-1]
prev_B:=B[i-1]
如果prev_swapped为True,则
如果A[i]<=prev_A或B[i]<=prev_B,则
除此以外,
从主方法调用函数dp(0,False)并返回其值作为结果
让我们看下面的实现以更好地理解:
范例程式码
class Solution: def solve(self, A, B): def dp(i=0, prev_swapped=False): if len(A) == i: return 0 elif i == 0: return min(dp(i + 1), 1 + dp(i + 1, True)) else: prev_A = A[i - 1] prev_B = B[i - 1] if prev_swapped: prev_A, prev_B = prev_B, prev_A if A[i] <= prev_A or B[i] <= prev_B: return 1 + dp(i + 1, True) else: ans = dp(i + 1) if A[i] > prev_B and B[i] > prev_A: ans = min(ans, 1 + dp(i + 1, True)) return ans return dp()ob = Solution()A = [2, 8, 7, 10] B = [2, 4, 9, 10] print(ob.solve(A, B))
输入值
[2, 8, 7, 10], [2, 4, 9, 10]
输出结果
1