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

2025-08-28:提取至多 K 个元素的最大总和。用go语言,给出一个 n 行 m 列的矩阵 grid,和一个长度为 n 的

0
分享至

2025-08-28:提取至多 K 个元素的最大总和。用go语言,给出一个 n 行 m 列的矩阵 grid,和一个长度为 n 的数组 limits,以及一个整数 k。你可以从矩阵中挑出至多 k 个格子的数值,但每一行第 i 行所选的格子数量不能超过 limits[i]。求在满足这些行限制与总体不超过 k 的前提下,所能取得的数值总和的最大可能值,并输出该最大和。

n == grid.length == limits.length。

m == grid[i].length。

1 <= n, m <= 500。

0 <= grid[i][j] <= 100000。

0 <= limits[i] <= m。

0 <= k <= min(n * m, sum(limits))。

输入:grid = [[5,3,7],[8,2,6]], limits = [2,2], k = 3。

输出:21。

解释:

从第 1 行提取至多 2 个元素,取出 7 。

从第 2 行提取至多 2 个元素,取出 8 和 6 。

至多提取 3 个元素时的最大总和 7 + 8 + 6 = 21 。

题目来自力扣3462。

分步骤描述过程:

  1. 1.问题理解

  • • 有一个nm列的矩阵grid,每行有m个整数。

  • • 一个长度为n的数组limits,其中limits[i]表示第i行最多能选取的格子数量。

  • • 整数k表示总共最多能选取的格子数量(全局限制)。

  • • 目标:在满足每行选取数量不超过limits[i]且总选取数不超过k的前提下,选取尽可能大的数值,使得总和最大。

2.直觉与策略

  • • 由于目标是总和最大,应该优先选取较大的数值。

  • • 每行内部:为了最大化总和,应该优先选取该行中最大的那些数值(因为每行最多只能选limits[i]个)。

  • • 全局:需要从所有行中选出最大的k个数值(但受限于每行最多只能贡献limits[i]个)。

3.具体步骤

  • 步骤1:对每行内部排序(降序)

    • • 对于每一行grid[i],将其元素按从大到小排序(降序排序)。

    • • 这样,该行最大的limits[i]个数值就在前面(因为最多只能选limits[i]个,所以只关心前limits[i]大的数)。

  • 步骤2:收集所有候选数值

    • • 从每一行中,取出前limits[i]大的数值(即排序后该行的前limits[i]个元素),并将它们全部加入一个大的列表a中。

    • • 注意:每行最多贡献limits[i]个数值,但实际可能少于limits[i](如果该行数值个数不足?但题目中limits[i] <= m,所以不会不足)。

  • 步骤3:全局排序(降序)

    • • 将列表a中的所有数值进行降序排序(从大到小)。

  • 步骤4:选取前k个最大的数值

    • • 从全局降序排序后的列表a中,取出前k个数值(因为最多只能选k个),并求和。

  • 步骤5:返回总和

    • • 将前k个数值的和作为结果返回。

4.为什么这样做是正确的?

  • • 每行内部降序排序后取前limits[i]个:确保了每行贡献的候选数值都是该行可能的最大值(且不超过行限制)。

  • • 将所有候选数值合并后降序排序取前k个:确保了全局选取的是最大的k个数值(同时隐含满足了行限制,因为每行最多只有limits[i]个数值在候选列表中)。

  • • 注意:由于每行最多只能选limits[i]个,而候选列表a中每行恰好有limits[i]个数值(即该行最大的那些),所以从a中取前k个时,可能某行被取了多个(但不会超过limits[i],因为该行在a中只有limits[i]个数值),因此行限制自然满足。

5.示例验证

  • • 示例:grid = [[5,3,7],[8,2,6]],limits = [2,2],k=3

    • • 第一行降序排序后为[7,5,3],取前2个:[7,5]

    • • 第二行降序排序后为[8,6,2],取前2个:[8,6]

    • • 合并候选列表:a = [7,5,8,6]

    • • 降序排序a[8,7,6,5]

    • • 取前3个:8,7,6,和为21(但注意:实际代码中取的是前3个,即8、7、6,但这里第一行贡献了7,第二行贡献了8和6,每行都不超过2个,且总数为3,满足条件)。

复杂度分析:
  • 时间复杂度

    • • 对每行内部排序:每行排序的时间复杂度为O(m log m),共有n行,所以总时间为O(n * m log m)

    • • 收集候选数值:需要遍历每行的前limits[i]个元素,总元素个数最多为sum(limits)(但不超过n * m)。

    • • 对候选列表a排序:a的长度最多为sum(limits)(但不超过n * m),所以排序时间为O((n*m) log(n*m))

    • • 总体时间复杂度:O(n * m log m + (n*m) log(n*m))。由于nm最大为500,所以n*m最大为250000,在可接受范围内。

  • 额外空间复杂度

    • • 存储候选列表a:最多需要n * m个元素(即O(n*m))。

    • • 排序需要递归栈空间(但Go的排序一般是原地排序,不需要额外空间?但降序排序使用自定义比较函数可能有一些开销)。

    • • 总体额外空间复杂度为O(n*m)(用于存储候选列表)。

Go完整代码如下:

package main import (     "fmt"     "slices" ) func maxSum(grid [][]int, limits []int, k int) (ans int64) {     a := []int{}     cmp := func(a, b int)int { return b - a }     for i, row := range grid {         slices.SortFunc(row, cmp)         a = append(a, row[:limits[i]]...)     }     slices.SortFunc(a, cmp)     for _, x := range a[:k] {         ans += int64(x)     }     return } func main() {     grid := [][]int{{5, 3, 7}, {8, 2, 6}}     limits := []int{2, 2}     k := 3     result := maxSum(grid, limits, k)     fmt.Println(result) }

Python完整代码如下:

# -*-coding:utf-8-*- def max_sum(grid, limits, k):     """     grid: List[List[int]]     limits: List[int],长度应为 n(行数),若不足则缺省为 0     k: int,总共最多取 k 个元素     返回最大总和(整数)     """     candidates = []     for i, row in enumerate(grid):         lim = limits[i] if i < len(limits) else0         if lim <= 0:             continue         # 取该行前 lim 个最大值(若 lim 大于行长度则取整行)         top = sorted(row, reverse=True)[:min(lim, len(row))]         candidates.extend(top)     # 对所有候选按降序取前 k 个求和     candidates.sort(reverse=True)     return sum(candidates[:k]) if __name__ == "__main__":     grid = [[5, 3, 7], [8, 2, 6]]     limits = [2, 2]     k = 3     print(max_sum(grid, limits, k)) 

我们相信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-11-09 15:35:42
115岁的李陈氏,出生于清朝的“老宝贝”|面孔

115岁的李陈氏,出生于清朝的“老宝贝”|面孔

大象新闻
2025-11-09 09:38:06
破案了!医生的视频是男主自己用手机拍的,同步云盘后被曝光了

破案了!医生的视频是男主自己用手机拍的,同步云盘后被曝光了

魔都姐姐杂谈
2025-11-09 14:54:24
45岁谢霆锋演唱会上拿出保温杯,网友:他也到了用保温杯的年纪

45岁谢霆锋演唱会上拿出保温杯,网友:他也到了用保温杯的年纪

红星新闻
2025-11-09 11:32:26
江苏:34岁女子独自住院,没人照顾,流泪哭诉:熬不住了想结婚

江苏:34岁女子独自住院,没人照顾,流泪哭诉:熬不住了想结婚

阿芒娱乐说
2025-11-09 07:03:22
中俄同时仗义出手,委内瑞拉反将一军,特朗普看到一个可怕的后果

中俄同时仗义出手,委内瑞拉反将一军,特朗普看到一个可怕的后果

空天力量
2025-11-08 20:13:35
牛肉面馆“给大学生免费加面”爆火 老板:希望做好自己的小生意,让顾客吃饱吃好

牛肉面馆“给大学生免费加面”爆火 老板:希望做好自己的小生意,让顾客吃饱吃好

红星新闻
2025-11-09 16:42:20
16GB+1TB!新机官宣:11月14日,正式发售!

16GB+1TB!新机官宣:11月14日,正式发售!

科技堡垒
2025-11-08 11:48:49
娶个洋媳妇能有多尴尬?网友:据说白人女孩体味很大,是真的吗

娶个洋媳妇能有多尴尬?网友:据说白人女孩体味很大,是真的吗

带你感受人间冷暖
2025-11-09 00:10:08
“谁娶我女儿谁倒霉!”母亲吐槽女儿房间太乱,网友:啥妈啥闺女

“谁娶我女儿谁倒霉!”母亲吐槽女儿房间太乱,网友:啥妈啥闺女

妍妍教育日记
2025-11-08 13:43:12
四川一双职工不让放春秋假?网友:少工作一个就行!

四川一双职工不让放春秋假?网友:少工作一个就行!

小李睡不醒了
2025-11-08 08:06:16
湖三崩再现!湖人20分差距不敌老鹰,东契奇22+11前状元19分

湖三崩再现!湖人20分差距不敌老鹰,东契奇22+11前状元19分

湖人崛起
2025-11-09 11:12:04
曾琦老公什么都没做,也被挖了出来!网友:有点理解主任了

曾琦老公什么都没做,也被挖了出来!网友:有点理解主任了

男女那点事儿儿
2025-11-08 12:59:03
偷拍者的镜头精准无误!

偷拍者的镜头精准无误!

蜻蜓世音
2025-11-09 12:22:16
俄大规模袭击乌克兰,乌国有火电站陷入瘫痪,德军司令:若与俄开战,德将成北约集结地

俄大规模袭击乌克兰,乌国有火电站陷入瘫痪,德军司令:若与俄开战,德将成北约集结地

扬子晚报
2025-11-09 15:18:17
升西部第三!约基奇32+14+14掘金大胜步行者 第170次三双里程碑

升西部第三!约基奇32+14+14掘金大胜步行者 第170次三双里程碑

醉卧浮生
2025-11-09 12:35:55
入木三分!山姆高管层被阿里系渗透,有网友声称是行业“百草枯”

入木三分!山姆高管层被阿里系渗透,有网友声称是行业“百草枯”

火山诗话
2025-11-08 06:44:23
阳性率上升!除了流感,这种病毒也开始高发,鼻塞、流鼻涕、咳嗽…目前尚无特效药

阳性率上升!除了流感,这种病毒也开始高发,鼻塞、流鼻涕、咳嗽…目前尚无特效药

新民晚报
2025-11-08 18:35:20
俄媒:俄军即将攻占乌克兰“第三首都”!俄副总理自曝参战:用狙击步枪还击乌军!俄对乌发动大规模空袭

俄媒:俄军即将攻占乌克兰“第三首都”!俄副总理自曝参战:用狙击步枪还击乌军!俄对乌发动大规模空袭

每日经济新闻
2025-11-08 22:55:11
“软的更软,硬的更硬”

“软的更软,硬的更硬”

环球网资讯
2025-11-07 19:53:14
2025-11-09 18:08:49
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1027文章数 50关注度
往期回顾 全部

科技要闻

黄仁勋亲赴台积电“讨要更多芯片”

头条要闻

河南大哥为救老人失去左腿:一条腿换回一条命 不算啥

头条要闻

河南大哥为救老人失去左腿:一条腿换回一条命 不算啥

体育要闻

他只想默默地拿走最后一亿美元

娱乐要闻

《繁花》事件影响:唐嫣工作被取消

财经要闻

10月CPI同比涨0.2% PPI同比下降2.1%

汽车要闻

钛7月销破2万 霜雾灰与青峦翠配色正式开启交付

态度原创

教育
健康
旅游
时尚
公开课

教育要闻

来上课了——高一下核心词汇讲解(三)第3段

超声探头会加重受伤情况吗?

旅游要闻

可惜,如此精彩的海心亭却空无一人,俨然成了洱海最孤独的景点

伊姐周六热推:电视剧《四喜》;电视剧《唐朝诡事录之长安》......

公开课

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

无障碍浏览 进入关怀版