题目描述:
有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉。
下标为 i 处的奶酪被吃掉的得分为:
·如果第一只老鼠吃掉,则得分为 reward1[i]。
·如果第二只老鼠吃掉,则得分为 reward2[i]。
给你一个正整数数组 reward1 ,一个正整数数组 reward2 ,和一个非负整数 k。
请你返回第一只老鼠恰好吃掉 k 块奶酪的情况下,最大得分为多少。
示例:

解题思路:
计算第二支老鼠的总得分–>计算两只老鼠得分的差距–>将差距排序–>根据差距找到比第二支老鼠适合的得分,得到最高得分
代码附上:
class Solution {
public int miceAndCheese(int[] reward1, int[] reward2, int k) {
int n=reward1.length;
int sum=0;// 记录总得分
if(n==k) {
// 第一只老鼠总得分
for(int i=0;i<n;i++) {
sum+=reward1[i];
}
return sum;
}
for(int i=0;i<n;i++) {
// 第二只老鼠总得分
sum+=reward2[i];
// 第一只老鼠和第二支老鼠的差值
reward1[i]-=reward2[i];
}
// 从小到大排序
Arrays.sort(reward1);
for(int i=0;i<k;i++) {
sum+=reward1[n-1-i];
}
return sum;
}
}
该问题是一个优化问题,目标是最大化第一只老鼠在吃掉k块奶酪时的得分。首先计算第二只老鼠的总得分,然后找出第一只老鼠与第二只老鼠得分的差距并排序,选取最大的k个差距值加到第一只老鼠的得分上,从而得出最大可能得分。
1203





