题目:
给你一个下标从 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 是可以得到的最大答案。
解答:首先我们设置一个整型变量max,用来存放这组数据的最大值。根据上面事例我们可以看出每一次选择的数字都是最大值,并且是上一个数字加一。将每一次的max相加并且循环K次就是最终答案。
int maximizeSum(int* nums, int numsSize, int k)
{
int max = nums[0];
for (int i = 0; i < numsSize; i++)
{
if (nums[i] > max)
{
max = nums[i];
}
}
int n = max;
int count = max;
for (int i = 1; i < k; i++)
{
n++;
count += n;
}
return count;
}
难点:1、容易认为最大值就是数组最后一个元素,其实不然,因为每一个所给的数组不是有序地