Problem: 2656. K 个元素的最大和
每日一题。
思路
从小到大排序,一直对最后那个值(下标)进行+1操作。
联系等差数列(d=1),前n项求和。n(a1+an)/2
或n*a1+n(n-1)d/2
Code
朴素
class Solution {
public int maximizeSum(int[] nums, int k) {
int len = nums.length;
int SnumMax = 0;
Arrays.sort(nums);
while (k-- != 0) {
SnumMax += nums[len - 1];
nums[len - 1] += 1;
}
return SnumMax;
}
}
贪心+等差求和公式
class Solution {
public int maximizeSum(int[] nums, int k) {
int numMax = 0;
for(int i:nums){
// 找到最大值
numMax = Math.max(numMax,i);
}
// 等差数列求和公式n(a1+an)/2
return k*(2*numMax+k-1)/2;
}
}