2025-03-11:使数组等于目标数组所需的最少操作次数。用go语言,给定两个长度相同的正整数数组 nums 和 target。
在一次操作中,你可以选择 nums 中的任意连续子数组,并将该子数组内的所有元素都增加或减少 1。
你的目标是计算将 nums 转变为 target 所需的最少操作次数。
1 <= nums.length == target.length <= 100000。
1 <= nums[i], target[i] <= 100000000。
输入: 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]。
答案2025-03-11:
chatgpt[1]
题目来自leetcode3229。
1.初始化变量:
2.循环遍历数组元素:
3.处理最后一个元素:
4.返回最终操作次数 ans。
总的时间复杂度分析:
所以,总的时间复杂度为 O(n)。
总的额外空间复杂度分析:
package main
import"fmt"
func minimumOperations(nums, target []int)int64 {
n := len(nums)
ans := max(target[0]-nums[0], 0)
for i := 1; i < n; i++ {
ans += max((target[i]-nums[i])-(target[i-1]-nums[i-1]), 0)
}
ans += max(-(target[n-1] - nums[n-1]), 0)
returnint64(ans)
}
func main() {
nums := []int{1, 3, 2}
target := []int{2, 1, 4}
result := minimumOperations(nums, target)
fmt.Println(result) // 输出结果
}
# -*-coding:utf-8-*-
defmax(a, b):
return a if a > b else b
defminimum_operations(nums, target):
n = len(nums)
ans = max(target[0] - nums[0], 0)
for i inrange(1, n):
ans += max((target[i] - nums[i]) - (target[i - 1] - nums[i - 1]), 0)
ans += max(-(target[n - 1] - nums[n - 1]), 0)
return ans
# 主程序
nums = [1, 3, 2]
target = [2, 1, 4]
result = minimum_operations(nums, target)
print(result) # 输出结果
我们相信 Go 语言和算法为普通开发者提供了强有力的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的 Go 语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。 欢迎关注“福大大架构师每日一题”,让 Go 语言和算法助力您的职业发展。
[1]
chatgpt: https://chatbotsplace.com/?rc=nnNWSCJ7EP