1. 解题思路
这一题由于各个数字无法改动位置,因此对于前 n n n个数,其所需的操作数就是确定的,剩下的就是如何使用最小的操作数获取最后一个数字。
我们考察每一位上的数字来获取最后一个数所需要的操作数,不妨设当前数字 x x x小于等于目标数 y y y,而最后一个数为 r r r,则此时有3种情况:
- x ≤ r ≤ y x\leq r \leq y x≤r≤y:此时只需要1次操作即可;
- r < x r < x r<x: 此时需要的操作数为 1 + x − r 1+x-r 1+x−r
- r > y r > y r>y: 此时需要的操作数为 1 + r − y 1+r-y 1+r−y
由此,我们考察使用每一位上的数字来获取最后一个数所需的操作数,然后取最小值即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def minOperations(self, nums1: List[int], nums2: List[int]) -> int:
op, extra, r = 0, math.inf, nums2[-1]
for x, y in zip(nums1, nums2):
x, y = (x, y) if x <= y else (y, x)
op += y-x
if x <= r <= y:
extra = 1
elif r < x:
extra = min(extra, 1 + (x-r))
else:
extra = min(extra, 1 + (r-y))
return op + extra
提交代码评测得到:耗时121ms,占用内存31.49MB。
2434

被折叠的 条评论
为什么被折叠?



