假设我们有一个非负数列表,例如nums和一个非负值k。现在假设我们可以执行在这里我们选择在NUMS单个正棕土和1。我们必须找到操作的最小数量减少它的操作所需使得列表中的总和在每对相邻值的<= K。如果答案很大,则返回结果mod 10 ^ 9 + 7。
因此,如果输入是像NUMS = [4,6,2,5]中,k = 6,则输出将是5,因为我们可以递减列表[3,3,1,4],这是一个总5个递减。这里的每一个相邻对的总和为<= 6。
为了解决这个问题,我们将遵循以下步骤-
m = 10 ^ 9 + 7
ANS:= 0
对于i在范围为0〜NUMS的尺寸 - 1,做
NUMS第[i + 1]:= 0
SM:= NUMS [I] + NUMS第[i + 1]
diff:= sm-k和0的最大值
nums [i +1]:= nums [i +1]-diff
如果nums [i + 1] <0,则
ans:= ans + diff
返回ANS模m
让我们看下面的实现以更好地理解-
m = 10 ** 9 + 7 class Solution: def solve(self, nums, k): ans = 0 for i in range(0, len(nums) - 1): sm = nums[i] + nums[i + 1] diff = max(sm - k, 0) nums[i + 1] -= diff if nums[i + 1] < 0: nums[i + 1] = 0 ans += diff return ans % m ob = Solution() nums = [4, 6, 2, 5] k = 6 print(ob.solve(nums, k))
[4, 6, 2, 5], 6
输出结果
5