查找Python中数组的最小调整成本
假设我们有一个正数数组;我们替换该数组数组中的每个元素,以使数组中两个相邻元素之间的差小于或等于给定目标。现在,我们必须最小化调整成本,因此要使新值和旧值之间的差总和最小。更准确地说,我们将∑|A[i]–Anew[i]|最小化其中i在0到n-1的范围内,此处n表示为A的大小,Anew为相邻差小于或等于目标的数组。
因此,如果输入类似于[56,78,53,62,40,7,26,61,50,48],目标=20,则输出将为25
为了解决这个问题,我们将遵循以下步骤-
n:=arr的大小
表格:=[[对于0到M范围内的i,为[0];对于0到n范围内的i,为[]
对于0到M+1范围内的j
table[0,j]:=|j-arr[0]|
对于1到n范围内的i,执行
表[i,j]:=100000000
对于k(最大值(j-target和0)和最小值(Mandj+target))中的k
table[i,j]=table[i,j],table[i-1,k]+|arr[i]-j|的最小值
对于0到M+1范围内的j
回答:=10000000
对于0到M+1范围内的j
ans=ans和table[n-1,j]的最小值
返回ans
示例
让我们看下面的实现以更好地理解-
M = 100 def get_min_cost(arr, target): n = len(arr) table = [[0 for i in range(M + 1)] for i in range(n)] for j in range(M + 1): table[0][j] = abs(j - arr[0]) for i in range(1, n): for j in range(M + 1): table[i][j] = 100000000 for k in range(max(j - target, 0), min(M, j + target) + 1): table[i][j] = min(table[i][j], table[i - 1][k] + abs(arr[i] - j)) ans = 10000000 for j in range(M + 1): ans = min(ans, table[n - 1][j]) return ans arr= [56, 78, 53, 62, 40, 7, 26, 61, 50, 48] target = 20 print(get_min_cost(arr, target))
输入值
[56, 78, 53, 62, 40, 7, 26, 61, 50, 48], 20
输出结果
35