心算挑战(java 算法)

简介: 心算挑战(java 算法)

心算挑战(java 算法)


「力扣挑战赛」心算项目的挑战比赛中,要求选手从 N 张卡牌中选出 cnt 张卡牌,若这 cnt 张卡牌数字总和为偶数,则选手成绩「有效」且得分为 cnt 张卡牌数字总和。

给定数组 cards 和 cnt,其中 cards[i] 表示第 i 张卡牌上的数字。 请帮参赛选手计算最大的有效得分。若不存在获取有效得分的卡牌方案,则返回 0。

示例 1:

输入:cards = [1,2,8,9], cnt = 3

输出:18

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

示例 2:

输入:cards = [3,3,1], cnt = 1

输出:0

解释:不存在获取有效得分的卡牌方案。

提示:

1 <= cnt <= cards.length <= 10^5

1 <= cards[i] <= 1000

解题思路在代码的注释里,非常的清晰明了,就不过多赘述了

package cn.itcast.algorithm.TTT_64;
import java.util.Arrays;
public class Main77 {
    public static void main(String[] args) {
        //测试用例
        int[] cards = {1,2,8,9};
        int cnt = 3;
        int result = maxmiumScore(cards,cnt);
        System.out.println(result);
    }
    private static int maxmiumScore(int[] cards, int cnt) {
        Arrays.sort(cards);
        int sum = 0;
        int qian = cards.length-1;
        //取最后cnt位最大的数,求和,如果是偶数就直接return
        while(cnt > 0){
            sum += cards[qian--];
            cnt--;
        }
        if (sum % 2 == 0){
            return sum;
        }
        //如果不是偶数,就往下走
        //利用了临近边界的数组元素的加减和sum的改变和复原
        for(int i = qian;i >= 0;i--){
            for(int j = qian + 1;j < cards.length;j++){
                /*
                因为cards是sort过的所以此时只需将进入sum的最小元素
                和未进入sum中cards中的最大元素一直进行交换
                */
                sum -= cards[j];
                sum += cards[i];
                if(sum % 2 == 0){
                    return sum;
                }
                //如果sum不为偶数,则将sum复原为原值,进行下一轮循环的运算
                sum -= cards[i];
                sum += cards[j];
            }
        }
        //到这里还是不存在,就return 0;
        return 0;
    }
}
相关文章
|
5天前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
6天前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)
|
11天前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
27 6
|
6天前
|
搜索推荐 算法 Java
|
11天前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
29 2
|
11天前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
25 1
|
11天前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
22 1
|
4天前
|
算法 Java
HanLP — HMM隐马尔可夫模型 -- 维特比(Viterbi)算法 --示例代码 - Java
HanLP — HMM隐马尔可夫模型 -- 维特比(Viterbi)算法 --示例代码 - Java
9 0
|
6天前
|
搜索推荐 算法 Java
插入排序算法(Java代码实现)
这篇文章通过Java代码示例详细解释了插入排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过插入排序对数组进行升序排列。
|
11天前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
29 0