LeetCode LCP40 心算挑战题解

看似一道简单的题目,实则不然,没有看评论的话,实在想不出来怎么写。

现在则由我来转述思想供大家参考理解,还是先给出示例,供大家更好的理解这个题目。

复制代码
输入:cards = [1,2,8,9], cnt = 3

输出:18

解释:选择数字为 1、8、9 的这三张卡牌,此时可获得最大的有效得分 1+8+9=18。

假若cards=[2,3,1,5,8,6,9]

所以我们的首要目标是先优化数组,使得数组从小到大排序Arrays.sort即可,然后就开始分情况开始讨论了,根据cnt的值,我们截取排序后的数组的后一段子数组,若后一段数组总和为偶数,那就说明这已经是最大的有效得分了,所以可以直接返回当前的sum,但如果是奇数,我们就又要分情况开始讨论了

如果为奇数,我们可以采取两个方式进行讨论

一个是去除掉最小的奇数换成剩余数组(总数组减去选中的子数组)中最大的偶数

一个是去除掉最小的偶数,换成剩余数组中最大的奇数

这个就是总的思路,其实并不难理解,主要是难在想到,没错就是想到...

复制代码
class Solution {
    public int maximumScore(int[] cards, int cnt) {
        Arrays.sort(cards);
        int n = cards.length;
        int[] num = new int[cnt];
        int sum = 0;
        int mi1 = Integer.MAX_VALUE;
        int mi2 = Integer.MAX_VALUE;
        for(int i=0;i<cnt;i++){
            num[i] = cards[n-cnt+i];
            sum+=num[i];
            if(num[i]%2==0){
                mi2 = Math.min(mi2,num[i]);
            }
            else{
                mi1 = Math.min(mi1,num[i]);
            }
        }
        int mx1 = Integer.MIN_VALUE;
        int mx2 = Integer.MIN_VALUE;
        for(int j=0;j<n-cnt;j++){
            if(cards[j]%2==0){
                mx2 = Math.max(mx2,cards[j]);
            }
            else{
                mx1 = Math.max(mx1,cards[j]);
            }
        }
        if(sum%2==0) return sum;
        else{
            int option1 = 0, option2 = 0;
            // 尝试用最大偶数替换当前选中的最小奇数
            if (mi1 != Integer.MAX_VALUE && mx2 != Integer.MIN_VALUE) {
                option1 = sum - mi1 + mx2;
            }
            // 尝试用最大奇数替换当前选中的最小偶数
            if (mi2 != Integer.MAX_VALUE && mx1 != Integer.MIN_VALUE) {
                option2 = sum - mi2 + mx1;
            }
            return Math.max(option1, option2);
        }
    }
}
相关推荐
Dillon Dong2 小时前
【风电控制】TI TMS320F28379D 双CPU架构解析与任务分布设计
嵌入式硬件·算法·变流器·风电控制
ps酷教程7 小时前
Jackson 解决没有无参构造函数的反序列化问题
java
NiceCloud喜云7 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
小羊在睡觉8 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
3DVisionary8 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
jiayong238 小时前
面试中遇到不熟悉问题的应对策略深度解析
面试·职场和发展
好评笔记8 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466858 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
sheeta19988 小时前
LeetCode 每日一题笔记 日期:2026.05.29 题目:3300. 最小元素
笔记·leetcode
_日拱一卒8 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先