LCP 40.心算挑战

文章介绍了如何解决LeetCode中的LCP40问题,即在给定整数数组cards和计数cnt的情况下,通过调整奇偶数位置以最大化得分。关键步骤包括对cards数组排序,找到最小的奇偶数和最大的奇偶数进行可能的交换。
摘要由CSDN通过智能技术生成

​​题目来源:

        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);
    }
}
 

总结:

        无官方题解。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值