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

2026-09-29:K 个元素的最大总和。用go语言,有一个整数数组,另外给出两个整数 k 和 mul。需要从数组中取出正好 k 个数,这些数的处理顺

0
分享至

2026-09-29:K 个元素的最大总和。用go语言,有一个整数数组,另外给出两个整数 k 和 mul。需要从数组中取出正好 k 个数,这些数的处理顺序可以自行安排。处理每一个被选中的数时,有两种方式可以任选一种:一种是把该数本身直接加入总分;另一种是把该数乘以当时 mul 的值,再把乘积加入总分。每处理完一个数,不管刚才选的是哪种方式,mul 都会自动减一,因此它可能变成零,也可能变成负数。目标是让最终得到的总和尽可能大,并返回这个最大的总和。

1 <= nums.length <= 100000。

1 <= nums[i] <= 100000。

1 <= k <= nums.length。

1 <= mul <= 100000。

输入: nums = [3,7,5,2], k = 2, mul = 4。

输出: 43。

解释:

一种最优方式如下:

一种最优选择是 nums[1] = 7 和 nums[2] = 5。

先处理 nums[1] = 7:选择乘法,因此贡献 7 * 4 = 28。此时,mul 变为 3。

接着处理 nums[2] = 5:选择乘法,因此贡献 5 * 3 = 15。

总和为 28 + 15 = 43。

题目来自力扣3974。

分步骤详细描述整个过程:

  1. 1. 准备输入数据
    有一个整数数组 nums,一个整数 k,一个整数 mul。
    nums 中每个元素都是正数(1 到 100000),k 表示要选出的元素个数,mul 是初始的乘数。

  2. 2. 对数组进行降序排序
    把 nums 中的所有元素按照从大到小的顺序排列。
    这样做的原因是:后面每个被选中的元素会依次对应一个乘数,而这个乘数是递减的(先是 mul,然后 mul-1,再然后 mul-2……直到变成 1,之后如果还有元素就保持为 1)。为了让总和最大,应该把最大的数分配给最大的乘数,把较小的数分配给较小的乘数。降序排序正好满足这个要求。

  3. 3. 初始化总和
    定义一个变量用来保存最终的总和,初始值为 0。

  4. 4. 遍历排序后数组的前 k 个元素
    因为只需要恰好 k 个元素,所以直接从排序后的数组开头取 k 个即可。
    依次处理这 k 个元素,每处理一个,就把它对总和的贡献加进去。

  5. 5. 对每个元素计算有效乘数
    当前有一个乘数 mul。
    对于当前元素 x,判断应该用哪个乘数来乘它。
    如果当前 mul 大于等于 1,那么乘以 mul 会让结果变大(因为 x 是正数),所以直接使用 mul。
    如果当前 mul 小于等于 0,乘以它会让结果变成零或负数,这显然不如直接加 x 本身,所以这时把有效乘数视为 1。
    换句话说,有效乘数就是 mul 和 1 中的较大值。

  6. 6. 累加贡献
    把当前元素 x 乘以这个有效乘数,得到一个贡献值。
    把这个贡献值加到总和变量中。

  7. 7. 更新 mul
    每处理完一个元素,无论刚才用了哪种方式,mul 都要自动减 1。
    这样下一个元素面对的就是比之前小 1 的乘数。
    如果 mul 已经很小,减到 0 或负数也没关系,因为下一步计算有效乘数时会用 1 来替代。

  8. 8. 循环直到处理完 k 个元素
    重复第 5 到第 7 步,直到前 k 个元素全部处理完毕。

  9. 9. 返回总和
    最终得到的总和就是可能的最大总和,直接返回。

为什么这样能得到最大值?
因为所有 nums 中的数都是正数,而乘数序列是单调不增的:先是 mul, mul-1, mul-2, …,降到 1 之后就一直是 1。
对于正数来说,越大的数乘以越大的乘数,对总和的贡献越大。
所以把最大的数放在最前面,让它享受最大的乘数,依次类推,就能让总和最大化。

时间复杂度和额外空间复杂度:

  • • 时间复杂度:
    主要消耗在排序上。数组长度为 n,排序需要 O(n log n) 的时间。
    排序之后只需要遍历前 k 个元素,时间复杂度为 O(k)。
    因为 k ≤ n,所以总时间复杂度为 O(n log n)。

  • • 额外空间复杂度:
    算法本身除了输入数组外,只使用了常数个变量(总和、循环变量、当前乘数等),没有开辟与 n 或 k 成比例的额外空间。
    排序过程如果是原地排序,通常只需要 O(log n) 的递归栈空间(比如快速排序的递归深度)。
    因此,额外空间复杂度可以认为是 O(1)(不考虑排序递归栈),或者严格说为 O(log n)(包含排序的栈空间)。但通常在这种算法分析中,会表述为额外空间 O(1)。

Go完整代码如下:

package main

import (
"fmt"
"slices"
)

func maxSum(nums []int, k int, mul int) (ans int64) {
slices.SortFunc(nums, func(a, b int)int { return b - a })
for _, x := range nums[:k] {
ans += int64(x) * int64(max(mul, 1))
mul--
}
return
}

func main() {
nums := []int{3, 7, 5, 2}
k := 2
mul := 4
result := maxSum(nums, k, mul)
fmt.Println(result)
}

Python完整代码如下:

# -*-coding:utf-8-*-

from typing import List

def max_sum(nums: List[int], k: int, mul: int) -> int:
nums.sort(reverse=True)
ans = 0
for x in nums[:k]:
ans += x * max(mul, 1)
mul -= 1
return ans

if __name__ == "__main__":
nums = [3, 7, 5, 2]
k = 2
mul = 4
result = max_sum(nums, k, mul)
print(result)

C++完整代码如下:

  




using namespace std;

long long maxSum(vector& nums, int k, int mul) {
// 降序排序
sort(nums.begin(), nums.end(), greater());
long long ans = 0;
for (int i = 0; i < k; ++i) {
int x = nums[i];
ans += (long long)x * max(mul, 1);
mul--;
}
return ans;
}

int main() {
vector nums = {3, 7, 5, 2};
int k = 2;
int mul = 4;
long long result = maxSum(nums, k, mul);
cout << result << endl;
return0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

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

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.

相关推荐
热点推荐
易会满,敛财数额特别巨大

易会满,敛财数额特别巨大

政知新媒体
2026-09-30 10:14:19
俄总统新闻秘书:允许乌克兰使用星链系统袭击俄罗斯纵深地区是鲁莽之举

俄总统新闻秘书:允许乌克兰使用星链系统袭击俄罗斯纵深地区是鲁莽之举

俄罗斯卫星通讯社
2026-09-30 15:34:57
余承东改口,徐直军上位!

余承东改口,徐直军上位!

量子派
2026-09-30 17:53:57
网传微信经营类小程序收款已自动向税务局推送数据,有老板被通知补税

网传微信经营类小程序收款已自动向税务局推送数据,有老板被通知补税

三言四拍
2026-09-30 11:45:58
太憋屈!5块金牌,5张非洲脸:谁在羞辱亚洲体育?

太憋屈!5块金牌,5张非洲脸:谁在羞辱亚洲体育?

荆楚寰宇文枢
2026-09-30 22:26:52
压哨夺金!9月29日收官,最新金牌榜:超日本98金17岁小将创历史

压哨夺金!9月29日收官,最新金牌榜:超日本98金17岁小将创历史

用冷眼洞悉世界
2026-09-30 07:22:51
去年我国25至29岁结婚人数最多

去年我国25至29岁结婚人数最多

第一财经资讯
2026-09-30 21:58:11
河南开封一对婆媳遭同村男子持刀杀害,遇害儿媳案发时怀有7个月身孕;案件一审宣判:被告人马某某死刑

河南开封一对婆媳遭同村男子持刀杀害,遇害儿媳案发时怀有7个月身孕;案件一审宣判:被告人马某某死刑

台州交通广播
2026-09-30 01:27:47
国台办:中国共产党鲜明提出收复台湾的主张,支持和推动了台湾光复运动

国台办:中国共产党鲜明提出收复台湾的主张,支持和推动了台湾光复运动

京彩台湾
2026-09-30 22:15:05
马卡:C罗提前结束欧国联比赛,可能标志着其国家队生涯的终结

马卡:C罗提前结束欧国联比赛,可能标志着其国家队生涯的终结

懂球帝
2026-10-01 02:11:06
东航回应空姐下跪!乘客闹完事就逃,将依法维护尊严,央广网出手

东航回应空姐下跪!乘客闹完事就逃,将依法维护尊严,央广网出手

小鋭有话说
2026-09-30 18:54:30
杭州降39%、广州降32%、上海降31%!不是房子卖光了, 是房东不卖

杭州降39%、广州降32%、上海降31%!不是房子卖光了, 是房东不卖

白米饭怎么吃
2026-09-30 12:59:30
张本智和性丑闻曝光!日本网友:运动员都瞄准女主播?照照镜子吧

张本智和性丑闻曝光!日本网友:运动员都瞄准女主播?照照镜子吧

念洲
2026-09-30 15:37:30
真大胆!两名华人拿着微信买来的美国护照入境,人脸识别当场露馅!

真大胆!两名华人拿着微信买来的美国护照入境,人脸识别当场露馅!

华人生活网
2026-10-01 02:15:33
上海黑恶“巨商”赵富强:建黑暗王国,残害无数女性,只因后台硬

上海黑恶“巨商”赵富强:建黑暗王国,残害无数女性,只因后台硬

阿胡
2026-09-29 10:42:42
目不识丁,出尽洋相?于和伟在金鹰奖上的发言,给内娱明星上了一课

目不识丁,出尽洋相?于和伟在金鹰奖上的发言,给内娱明星上了一课

乡野小珥
2026-10-01 00:01:04
WTT官宣:王楚钦林诗栋因伤退出中国大满贯 亚运后均存伤病问题

WTT官宣:王楚钦林诗栋因伤退出中国大满贯 亚运后均存伤病问题

醉卧浮生
2026-09-30 21:38:13
以总理称赴以航班飞行员“蓄意坠机”

以总理称赴以航班飞行员“蓄意坠机”

界面新闻
2026-09-30 22:06:36
中国挖出世界第一大油田,全球格局一夜变天!复兴之路谁能挡

中国挖出世界第一大油田,全球格局一夜变天!复兴之路谁能挡

听风行天涯
2026-09-29 18:32:36
迪拜飞以色列航班劫机信号已解除:俄裔机长和乌克兰裔副驾激烈争吵,机组有人失去意识

迪拜飞以色列航班劫机信号已解除:俄裔机长和乌克兰裔副驾激烈争吵,机组有人失去意识

红星新闻
2026-09-30 16:32:43
2026-10-01 04:56:49
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1488文章数 83关注度
往期回顾 全部

科技要闻

OpenAI凌晨大上新!新助手dots迎战Muse

头条要闻

美国著名演员史泰龙发声:我糟蹋了自己的身体

头条要闻

美国著名演员史泰龙发声:我糟蹋了自己的身体

体育要闻

30天30队·火箭:乌度卡的控制欲

娱乐要闻

胡歌现身游本昌遗体告别仪式

财经要闻

“杭州六小龙”迎来价值重估

汽车要闻

燃油车的最佳平替 长城大狗HEV简单好开更经济

态度原创

家居
旅游
游戏
公开课
军事航空

家居要闻

2026建博会(广州) 公装联探展交流活动

旅游要闻

漫游京城 共赏金秋盛景

《永恒之塔2》登顶Steam畅销榜 开服延迟引差评

公开课

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

军事要闻

美军最后2500人撤离伊拉克

无障碍浏览 进入关怀版