网易首页 > 网易号 > 正文 申请入驻

2025-04-07:对 Bob 造成的最少伤害。用go语言,给定一个整数 power 和两个整数数组 damage 和 hea

0
分享至

2025-04-07:对 Bob 造成的最少伤害。用go语言,给定一个整数 power 和两个整数数组 damage 和 health,这两个数组的长度相同,都为 n。

Bob 有 n 个敌人,当第 i 个敌人仍然存活时(即 health[i] > 0),每秒他会受到来自该敌人 damage[i] 点的伤害。在每秒钟结束时,Bob会选择一个还活着的敌人进行攻击,使该敌人的健康值减少 power。

请计算在 Bob 消灭所有敌人之前,他所受到的最小总伤害。

1 <= power <= 10000。

1 <= n == damage.length == health.length <= 100000。

1 <= damage[i], health[i] <= 10000。

输入:power = 4, damage = [1,2,3,4], health = [4,5,6,8]。

输出:39。

解释:

最开始 2 秒内都攻击敌人 3 ,然后敌人 3 会被消灭,这段时间内对 Bob 的总伤害是 10 + 10 = 20 点。

接下来 2 秒内都攻击敌人 2 ,然后敌人 2 会被消灭,这段时间内对 Bob 的总伤害是 6 + 6 = 12 点。

接下来 1 秒内都攻击敌人 0 ,然后敌人 0 会被消灭,这段时间内对 Bob 的总伤害是 3 点。

接下来 2 秒内都攻击敌人 1 ,然后敌人 1 会被消灭,这段时间内对 Bob 的总伤害是 2 + 2 = 4 点。

题目来自leetcode3273。

大体步骤如下:

  1. 1.函数minDamage的定义

  • • 输入:一个整数power,两个整数数组damagehealth。两个数组的长度都是n,表示 Bob 要面对的n个敌人的伤害和生命值。

2.计算敌人的攻击周期

  • • 创建一个结构体pair,包含两个字段kd,其中k表示消灭该敌人所需的秒数,d表示该敌人每秒造成的伤害。

  • • 用变量a存储每个敌人的这些信息。具体地,对于每个敌人i,计算:

    • k = (health[i] - 1) / power + 1,这代表了需要几秒钟才能消灭敌人i

    • • 将kdamage[i]作为一对存入数组a

3.排序敌人

  • • 使用slices.SortFunc对敌人按照k * damage的值进行排序。排序的依据是:

    • • 优先消灭对 Bob 造成伤害较大的敌人,因为在较长的存活时间内,伤害累积会更高。

  • • 这可以确保那些可以造成最大累积伤害的敌人优先被攻击。

4.计算总伤害

  • • 初始化一个变量s为0,表示活着的敌人总计的攻击周期。

  • • 遍历排序后的敌人数组a,对于每一个敌人p

    • • 将当前敌人p的攻击周期p.k加到s上。

    • • 计算 Bob 在消灭敌人p期间所遭受的伤害并累加到ans

      • • 当前伤害贡献为s * p.d,表示在消灭当前敌人期间,Bob 遭受的总伤害。

  • • 最终,ans就是 Bob 在消灭所有敌人之前所受到的最小总伤害。

5.输出结果

  • • 打印结果,即 Bob 受到的最小总伤害。

时间复杂度
  • • 计算每个敌人消灭所需的时间为 O(n),而计算每个敌人的伤害为 O(n)。因此这部分的复杂度为 O(n)。

  • • 排序的复杂度为 O(n log n)。

  • • 综上所述,整体时间复杂度为O(n log n)

空间复杂度
  • • 创建一个结构体数组a,其大小与healthdamage数组相同,为 O(n)。

  • • 其他临时变量的空间开销相对较小,因此总体空间复杂度为O(n)

总结:该代码的时间复杂度是 O(n log n),空间复杂度是 O(n)。

Go完整代码如下:

package main import (     "fmt"     "slices" ) func minDamage(power int, damage, health []int) (ans int64) {     type pair struct{ k, d int }     a := make([]pair, len(health))     for i, h := range health {         a[i] = pair{(h-1)/power + 1, damage[i]}     }     slices.SortFunc(a, func(p, q pair)int { return p.k*q.d - q.k*p.d })     s := 0     for _, p := range a {         s += p.k         ans += int64(s) * int64(p.d)     }     return } func main() {     power := 4     damage := []int{1, 2, 3, 4}     health := []int{4, 5, 6, 8}     result := minDamage(power, damage, health)     fmt.Println(result) }

Python完整代码如下:

# -*-coding:utf-8-*- defmin_damage(power, damage, health):     classPair:         def__init__(self, k, d):             self.k = k             self.d = d          a = []     for h, d inzip(health, damage):         k = (h - 1) // power + 1         a.append(Pair(k, d))          # 自定义排序函数     defcompare(p, q):         return p.k * q.d - q.k * p.d          # 在Python中,sorted函数不支持自定义比较函数,需要使用functools.cmp_to_key     from functools import cmp_to_key     a.sort(key=cmp_to_key(compare))          ans = 0     s = 0     for p in a:         s += p.k         ans += s * p.d          return ans power = 4 damage = [1, 2, 3, 4] health = [4, 5, 6, 8] result = min_damage(power, damage, health) print(result)

我们相信 Go 语言和算法为普通开发者提供了强有力的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的 Go 语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。 欢迎关注“福大大架构师每日一题”,让 Go 语言和算法助力您的职业发展

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
上海警方通报:来沪人员袁某,行拘!在外滩所作所为造成恶劣社会影响

上海警方通报:来沪人员袁某,行拘!在外滩所作所为造成恶劣社会影响

上观新闻
2025-12-20 13:01:19
羽球总决赛第4日:国羽5胜1负!王祉怡约战安洗莹,梁王组合复仇

羽球总决赛第4日:国羽5胜1负!王祉怡约战安洗莹,梁王组合复仇

钉钉陌上花开
2025-12-20 22:41:47
燕梳楼:十问南京博物院

燕梳楼:十问南京博物院

燕梳楼频道
2025-12-19 15:56:56
自带1-0,哈兰德本赛季英超10次首开记录,其他球员没超过5次

自带1-0,哈兰德本赛季英超10次首开记录,其他球员没超过5次

懂球帝
2025-12-20 23:19:08
迷人的大腿:生命的等高线

迷人的大腿:生命的等高线

疾跑的小蜗牛
2025-12-19 07:25:05
摩尔线程,重大发布!

摩尔线程,重大发布!

数据宝
2025-12-20 18:11:50
【解局】不到24小时联署超500万,“弹劾赖清德”为何呼声如此之高?

【解局】不到24小时联署超500万,“弹劾赖清德”为何呼声如此之高?

环球网资讯
2025-12-19 19:00:07
日本美女主播闪婚小泉进次郎,身材火辣颜值高,不雅视频引爆全网

日本美女主播闪婚小泉进次郎,身材火辣颜值高,不雅视频引爆全网

来科点谱
2025-12-18 09:00:07
又老又丑,连普通话都说不好,为何能让千亿富豪对她情有独钟?

又老又丑,连普通话都说不好,为何能让千亿富豪对她情有独钟?

素衣读史
2025-12-20 16:26:36
房子贬值后才想通:那几百万不是凭空消失了,是被偷走了...

房子贬值后才想通:那几百万不是凭空消失了,是被偷走了...

深度报
2025-12-19 23:14:12
欧洲傻眼了!你敢冻我2290亿?好!我直接“合法抄家”2300亿。

欧洲傻眼了!你敢冻我2290亿?好!我直接“合法抄家”2300亿。

忠于法纪
2025-12-20 10:20:04
从何时起,江西菜沦为了民工饮食的代名词

从何时起,江西菜沦为了民工饮食的代名词

食味艺文志
2025-12-18 17:11:05
中戏院长郝戎风波升级,被扒两届艺考成绩雷同,易烊千玺牵连其中

中戏院长郝戎风波升级,被扒两届艺考成绩雷同,易烊千玺牵连其中

萌神木木
2025-12-20 13:14:47
泰柬双方阵亡士兵抚恤待遇差距悬殊,柬埔寨仅7200元,泰国200万

泰柬双方阵亡士兵抚恤待遇差距悬殊,柬埔寨仅7200元,泰国200万

环球热点快评
2025-12-19 09:15:57
若没有尸检,小洛熙的去世只归结为手术风险

若没有尸检,小洛熙的去世只归结为手术风险

慕容律师
2025-12-20 21:08:21
单场1.5亿封神!小红书新带货一姐诞生

单场1.5亿封神!小红书新带货一姐诞生

互联网品牌官
2025-12-19 16:36:53
美国终于回过味:中国这哪是买石油,分明是在给俄进行“大换血”

美国终于回过味:中国这哪是买石油,分明是在给俄进行“大换血”

沧海旅行家
2025-12-20 13:25:33
威金顿大赞广东队1人:他个人能力很强,很厉害

威金顿大赞广东队1人:他个人能力很强,很厉害

体育哲人
2025-12-20 18:11:20
到底选谁任9号?相比后防伤情频发,前锋设定更让阿尔特塔伤脑筋

到底选谁任9号?相比后防伤情频发,前锋设定更让阿尔特塔伤脑筋

里芃芃体育
2025-12-21 00:10:07
博主:申花门将鲍亚雄、前锋费尔南多无限接近加盟云南玉昆

博主:申花门将鲍亚雄、前锋费尔南多无限接近加盟云南玉昆

懂球帝
2025-12-20 11:16:27
2025-12-21 01:15:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1076文章数 51关注度
往期回顾 全部

科技要闻

许四清:具身智能的"ChatGPT时刻"还未到来

头条要闻

印度官员:若"台湾有事" 印度不太可能像西方那样回应

头条要闻

印度官员:若"台湾有事" 印度不太可能像西方那样回应

体育要闻

我开了20年大巴,现在是一名西甲主帅

娱乐要闻

2026央视跨年晚会阵容曝光,豪华阵仗

财经要闻

求解“地方财政困难”

汽车要闻

岚图推进L3量产测试 已完成11万公里实际道路验证

态度原创

数码
教育
家居
公开课
军事航空

数码要闻

50岁了!长虹第一台彩电入驻中国国家博物馆

教育要闻

高二英语词汇量有3000,成绩只有40多分,原因有两个

家居要闻

高端私宅 理想隐居圣地

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

泽连斯基:前线局势愈发艰难

无障碍浏览 进入关怀版