本篇博客会讲解力扣“2656. K 个元素的最大和”的解题思路,这是题目链接。
先来审题:
以下是输出示例:
以下是提示:
本题有2种思路,一种是直接按照题目所说的方式模拟,另一种是直接使用数学公式。
显然后一种思路效率更高。根据观察,每次都是操作最大的元素,而最大的元素+1后还是最大的元素,所以实际要求的就是max + max+1 + max+2 + ... + max+k-1
,这就可以运用等差数列求和公式。
首项为max,末项为man+k-1,项数为k,直接(首项+末项)*项数/2
即可。
int maximizeSum(int* nums, int numsSize, int k){
// 求最大值
int max = nums[0];
for (int i = 1; i < numsSize; ++i)
{
if (nums[i] > max)
max = nums[i];
}
// 计算max + max+1 + max+2 + ... + max+k-1
// (首项+末项)*项数/2
// 首项=max
// 末项=max+k-1
// 项数=k
//return (max + max+k-1) * k / 2;
return (max*2 + k-1) * k / 2;
}
轻松通过。
总结
善于寻找题目中隐藏的数学规律,提高效率。
感谢大家的阅读!