题目来源:
leetcode题目,网址:LCP 40. 心算挑战 - 力扣(LeetCode)
解题思路:
找到最大的 cnt 个数后,若其和非偶数,将最小的奇数用剩余数字中最大的偶数替换或将最小的偶数用剩下数字中最大的奇数替换。
解题代码:
class Solution {
public int maxmiumScore(int[] cards, int cnt) {
Arrays.sort(cards); //cards 递增
int[] got=new int[cnt]; //got 递减
for(int i=0;i<cnt;i++){
got[i]=cards[cards.length-i-1];
}
int res=Arrays.stream(got).sum();
if(res%2==0){
return res;
}
//都是指位置
int cardsMaxEven=-1;
int cardsMaxOdd=-1;
int gotMinEven=-1;
int gotMinOdd=-1;
//找到got中最小的奇数和最小的偶数
for(int i=got.length-1;i>=0;i--){
if(got[i]%2==0){
if(gotMinEven==-1){
gotMinEven=i;
}
if(gotMinOdd!=-1){
break;
}
}else{
if(gotMinOdd==-1){
gotMinOdd=i;
}
if(gotMinEven!=-1){
break;
}
}
}
//找到cards中最大的奇数和最大的偶数
for(int i=cards.length-cnt-1;i>=0;i--){
if(cards[i]%2==0){
if(cardsMaxEven==-1){
cardsMaxEven=i;
}
if(cardsMaxOdd!=-1){
break;
}
}else{
if(cardsMaxOdd==-1){
cardsMaxOdd=i;
}
if(cardsMaxEven!=-1){
break;
}
}
}
int exchangeMinOdd=(gotMinOdd!=-1&&cardsMaxEven!=-1)?res-got[gotMinOdd]+cards[cardsMaxEven]:0;
int exchangeMinEven=(gotMinEven!=-1 && cardsMaxOdd!=-1)?res-got[gotMinEven]+cards[cardsMaxOdd]:0;
return Math.max(exchangeMinEven,exchangeMinOdd);
}
}
总结:
无官方题解。