【教3妹学编程-算法题】K 个元素的最大和

67 阅读2分钟

阳光明媚

3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包”

2哥 :3妹,什么事呀这么开发。

3妹:2哥你看今天的天气多好啊,阳光明媚、万里无云、秋高气爽,适合秋游。

2哥:是啊,立冬之后天气多以多云为主,好不容易艳阳高照。可是你不能秋游,赶紧收拾收拾上班去啦

3妹:哼, 好吧~

2哥:给你出了一道题发你微信里了, 上班通勤的路上记得看一下,回来问你答案~

image.png 3妹:知道啦,难不倒我!

题目:

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你需要执行以下操作 恰好 k 次,最大化你的得分:

从 nums 中选择一个元素 m 。 将选中的元素 m 从数组中删除。 将新元素 m + 1 添加到数组中。 你的得分增加 m 。 请你返回执行以上操作恰好 k 次后的最大得分。

示例 1:

输入:nums = [1,2,3,4,5], k = 3 输出:18 解释:我们需要从 nums 中恰好选择 3 个元素并最大化得分。 第一次选择 5 。和为 5 ,nums = [1,2,3,4,6] 。 第二次选择 6 。和为 6 ,nums = [1,2,3,4,7] 。 第三次选择 7 。和为 5 + 6 + 7 = 18 ,nums = [1,2,3,4,8] 。 所以我们返回 18 。 18 是可以得到的最大答案。 示例 2:

输入:nums = [5,5,5], k = 2 输出:11 解释:我们需要从 nums 中恰好选择 2 个元素并最大化得分。 第一次选择 5 。和为 5 ,nums = [5,5,6] 。 第二次选择 6 。和为 6 ,nums = [5,5,7] 。 所以我们返回 11 。 11 是可以得到的最大答案。

提示:

1 <= nums.length <= 100 1 <= nums[i] <= 100 1 <= k <= 100

思路:

思考

从第一次操作开始每次选择数组中的最大值,由于最大值在加一后仍为数组中的最大值,所以若初始数组中的最大值为 m,则 k 次操作后我们能获得的分数为:

java代码:

class Solution {
    public int maximizeSum(int[] nums, int k) {
        int max = Arrays.stream(nums).max().getAsInt();
        return (k-1)*k/2+k*max;
    }
}