- 👑专栏内容:力扣刷题
- ⛪个人主页:子夜的星的主页
- 💕座右铭:前路未远,步履不停
目录
- 一、题目描述
- 二、题目分析
一、题目描述
题目链接:K个元素的最大和
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你需要执行以下操作 恰好 k 次,最大化你的得分:
- 从 nums 中选择一个元素 m 。
- 将选中的元素 m 从数组中删除。
- 将新元素 m + 1 添加到数组中。
- 你的得分增加 m 。
- 请你返回执行以上操作恰好 k 次后的最大得分。
二、题目分析
思路很简单,只需要先找到最大值,让后循环累加最大值以及后 k 次操作就行了。
class Solution {
public int maximizeSum(int[] nums, int k) {
int max = findMax(nums);
int sum = calculateSum(max, k);
return sum;
}
private int findMax(int[] nums) {
int max = Integer.MIN_VALUE;
for (int num : nums) {
if (num > max) {
max = num;
}
}
return max;
}
private int calculateSum(int max, int k) {
int sum = 0;
for (int i = 0; i < k; i++) {
sum += max + i;
}
return sum;
}
}
findMax
方法用于找到数组nums中的最大值。它遍历数组中的每个元素,通过比较更新一个变量max,最终返回最大值。
calculateSum
方法用于计算最大和。它接收最大值max
和整数 k 作为参数,通过一个循环累加最大值及其后续的 k 个连续整数,最终返回累加和。
当然,你也可以向下面这样写:
class Solution {
public int maximizeSum(int[] nums, int k) {
int sum = 0;
int max = Arrays.stream(nums).max().getAsInt();
for(int i = 0;i<k;i++){
sum = sum + max + i;
}
return sum;
}
}
解释一下:int max = Arrays.stream(nums).max().getAsInt();
当调用 Arrays.stream(nums)
,它将整数数组 nums 转换为一个流(Stream)对象。这个流对象允许你在数组上执行各种操作。接下来,调用 .max()
方法会返回流中的最大元素。
这里,我们得到的是一个 OptionalInt
对象,它表示可能存在或不存在的最大值。OptionalInt
是一个容器类,可以包含一个整数值或者表示没有值的情况。如果流中有最大值,你可以使用 .getAsInt()
方法从 OptionalInt
对象中获取真正的最大值。