3229. 使数组等于目标数组所需的最少操作次数
题目描述
给你两个长度相同的正整数数组 nums
和 target
。
在一次操作中,你可以选择 nums
的任何子数组,并将该子数组内的每个元素的值增加或减少 1。
返回使 nums
数组变为 target
数组所需的 最少 操作次数。
示例 1:
输入: nums = [3,5,1,2], target = [4,6,2,4]
输出: 2
解释:
执行以下操作可以使 nums
等于 target
:
- nums[0..3]
增加 1,nums = [4,6,2,3]
。
- nums[3..3]
增加 1,nums = [4,6,2,4]
。
示例 2:
输入: nums = [1,3,2], target = [2,1,4]
输出: 5
解释:
执行以下操作可以使 nums
等于 target
:
- nums[0..0]
增加 1,nums = [2,3,2]
。
- nums[1..1]
减少 1,nums = [2,2,2]
。
- nums[1..1]
减少 1,nums = [2,1,2]
。
- nums[2..2]
增加 1,nums = [2,1,3]
。
- nums[2..2]
增加 1,nums = [2,1,4]
。
提示:
1 <= nums.length == target.length <= 105
1 <= nums[i], target[i] <= 108
解法
方法一:动态规划
我们可以先计算出 $\textit{nums}$ 和 $\textit{target}$ 两个数组的差值,然后对于一个差值数组,我们找出连续的差值符号相同的区间,然后对于每个区间,我们将第一个元素的绝对值加到结果中,然后对于后面的元素,如果差值的绝对值比前一个差值的绝对值大,那么我们将绝对值的差值加到结果中。
时间复杂度 $O(n)$,其中 $n$ 为数组 $\textit{nums}$ 的长度。空间复杂度 $O(1)$。
相似题目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|