有两只老鼠和 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[] diffs=new int[n];
int ans=0;
for(int i=0;i<n;i++){
ans+=reward2[i];
diffs[i]=reward1[i]-reward2[i];
}
Arrays.sort(diffs);
for(int i=1;i<=k;i++){
ans+=diffs[n-i];
}
return ans;
}
}
思路:先把rewad2都加起来作为ans,然后把r1-r2的值存到新数组diffs中。
然后对r1排序,从小到大。再把r1的后k位的diffs加到ans中。
因为第一只老鼠恰好吃掉k块奶酪后,其余的都是r2吃掉。
所以先把r2加起来,再加上r1从大到小的前k位的差就行了。