前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >2025-03-11:使数组等于目标数组所需的最少操作次数。用go语言,给定两个长度相同的正整数数组 nums 和 target

2025-03-11:使数组等于目标数组所需的最少操作次数。用go语言,给定两个长度相同的正整数数组 nums 和 target

作者头像
福大大架构师每日一题
发布2025-03-12 14:58:40
发布2025-03-12 14:58:40
4200
代码可运行
举报
运行总次数:0
代码可运行

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.初始化变量:

  • • 定义变量 n 表示数组的长度,将 nums 中第一个元素与 target 中对应位置的元素相减并取最大值作为初始值 ans。

2.循环遍历数组元素:

  • • 从索引为 1 的元素开始,逐个遍历数组元素。
  • • 计算当前位置的操作次数:当前位置的目标值减去当前位置的原始值,减去前一个位置目标值与原始值的差值,取结果与 0 的最大值。
  • • 将上面计算的值加到 ans 中。

3.处理最后一个元素:

  • • 单独计算最后一个位置的操作次数:目标数组最后一个元素与原始数组最后一个元素的差值,取结果与 0 的最大值。
  • • 将此次操作次数加到 ans 中。

4.返回最终操作次数 ans。

总的时间复杂度分析:

  • • 初始化给定数组时间复杂度为 O(1);
  • • 遍历数组元素共需循环 n 次,计算每次操作的时间复杂度为 O(1);
  • • 最终返回结果时间复杂度为 O(1)。

所以,总的时间复杂度为 O(n)。

总的额外空间复杂度分析:

  • • 需要常量级别的额外空间来存储变量,不随输入规模变化,额外空间复杂度为 O(1)。

Go完整代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
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) // 输出结果
}

Python完整代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
# -*-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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大体步骤如下:
  • Go完整代码如下:
  • Python完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档