Leetcode-1753-移除石子的最大得分

news2025/1/23 2:10:37

在这里插入图片描述

1、堆

我们可以维护一个大顶堆,其中储存了三个石子堆中石子的个数。为了确保我们的分数尽可能大,我们每次都需要从最大的两个堆中取出石子。因此我们不断循环,每次都从当前最大的堆中取出石子。值得注意的是,为了确保能够发现游戏的停止状态,因此我们每次取出石子之后需要判断当前个数是否大于0,若是则继续进行;否则说明已经抵达停止状态我们需要跳出循环。

class Solution {
public:
    int maximumScore(int a, int b, int c) {
        int score = 0;
        priority_queue<int> dq;
        dq.push(a);
        dq.push(b);
        dq.push(c);
        while (true) {
            int max = dq.top();
            dq.pop();
            if (max > 0) --max;
            else break;
            int max2 = dq.top();
            dq.pop();
            if (max2 > 0) --max2;
            else break;
            ++score;
            dq.push(max);
            dq.push(max2);
        }
        return score;
    }
};

2、数学

我们假设三个石子堆中石子个数的大小顺序为 a ≤ b ≤ c a \le b \le c abc。显然,当 a + b ≤ c a+b \le c a+bc时,显然我们只需要将 a a a b b b中所有的石子都拿走即可,此时的最终分数为 a + b a+b a+b。当 a + b > c a+b > c a+b>c时,此时我们需要组合讨论,我们假设从 c c c a a a中取走了 k 1 k_1 k1个石子,从 c c c b b b中取走了 k 2 k_2 k2个石子,显然 k 1 + k 2 = c k_1+k_2=c k1+k2=c。由于我们最后取走石子时, a a a b b b中的石子相等或相差1。所以此时我们的分数为 k 1 + k 2 + ⌊ ( a − k 1 ) + ( b − k 2 ) 2 ⌋ k_1+k_2+\left \lfloor \frac{(a-k_1)+(b-k_2)}{2} \right \rfloor k1+k2+2(ak1)+(bk2),化简后为 ⌊ a + b + c 2 ⌋ \left \lfloor \frac{a+b+c}{2} \right \rfloor 2a+b+c

class Solution {
public:
    int maximumScore(int a, int b, int c) {
        int sum = a + b + c;
        int maxVal = max({a, b, c});
        if (sum - maxVal < maxVal) {
            return sum - maxVal;
        } else {
            return sum / 2;
        }
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据管理篇之存储和成本管理

第14章 存储和成本管理 目标&#xff1a;有效的降低存储资源的消耗&#xff0c;节省存储成本。 1.数据压缩 问题 在分布式文件系统中&#xff0c;为了提高数据的可用性与性能 &#xff0c;通常会将数据存储3份&#xff0c;这就意味着存储 1TB 的逻辑数据&#xff0c; 实际上…

iOS自动化真机测试验证环境过程中常见问题解析

本文节选自霍格沃兹测试学院内部教材 本章节主要讲解 iOS 自动化真机配置以及在 iOS 真机执行自动化时常见问题与解决方法。 真机使用的Capability 与模拟器不同&#xff0c;真机测试需要如下的 Capability 方式一&#xff1a;设置 App 路径&#xff0c;启动 App&#xff08;自…

SpringBoot项目开启远程调试

1、服务端设置 cat start.sh #!/bin/bash echo "i will start the program!" java -jar -Xdebug -Xrunjdwp:transportdt_socket,servery,address9999 xxxxx-SNAPSHOT.jar --server.port10991 echo "start success" 2、开发工具设置 3、然后&#…

计算机网络~计算机网络体系结构

一、计算机网络的概念和功能 1. 计算机网络 是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统计算机网络是互联的、自治的计算机集合 互联&#xff1a;通过通信链路互联互通自治&a…

π120M30 双通道数字隔离器兼容ADuM3210TRZ 广泛应用于工业自动化系统方案

π120M30 双通道数字隔离器兼容ADuM3210TRZ 广泛应用于工业自动化系统方案 。具有出色的性能特征和可靠性&#xff0c;整体性能优于光耦和基于其他原理的数字隔离器产品。传输通道间彼此独立&#xff0c;可实现多种传输方向的配置&#xff0c;可实现 3.0kV rms 隔离耐压等级和 …

【Java语言】— 类型转换

1.类型转换 &#xff08;1&#xff09;自动类型转换 类型范围小的变量&#xff0c;可以直接赋值给类型范围大的变量。 ①自动类型转换的底层原理 ②自动类型转换的其他形式 &#xff08;2&#xff09;表达式的自动类型转换 在表达式中&#xff0c;小范围类型的变量会自动转…

python之序列反转

python之序列反转 方式1&#xff1a;.reverse() a [1, 2, 3, 4, 5] print(a.reverse()) # None&#xff0c;函数原地反转&#xff0c;不具备排序功能&#xff0c;而且没有返回值 print(a) # [5, 4, 3, 2, 1]方式2&#xff1a;reversed a [1, 2, 3, 4, 5] print(reversed…

2021年全国职业院校技能大赛网络搭建与应用赛项——国赛组播题

2021年全国职业院校技能大赛网络搭建与应用赛项——国赛组播题 sw1:# ip pim multicast-routing &#xff08;开启组播模式&#xff0c;在全局模式&#xff09; int vlan 10 ip pim dense-mode &#xff08;在接口模式下开启组播-密集模式协议&#xff09; ip igmp version 2 i…

正大国际期货:恒指德指交易导致亏损的原因是什么?

在交易过程中&#xff0c;经常会遇到我们事先对这次的交易进行了详细的分析推理&#xff0c;还制定了周密可行的策略&#xff0c;但真正落实到交易活动过程中却变得面目全非&#xff0c;屡屡败退&#xff0c;让我们措手不及这样的现象&#xff0c;是什么原因导致&#xff1f;正…

如何开通 API 服务并授予项目 API 服务的调用权限

涂鸦 IoT 开发平台开放多种业务 API 服务&#xff0c;全面覆盖全屋智能管理、行业通用设备用户管理、垂直品类开放能力、各类数据服务等业务需求。 本文将为大家介绍如何开通 API 服务并授予项目 API 服务的调用权限。 个人数据隐私声明 开发者调用的部分 云服务 API 会获取用…

链表(2)------数据结构

1)进行反转单链表:节点的值不发生改变&#xff0c;只需要进行修改节点的指向 进行测试的时候要给方法传入一个头结点 输入:1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff1b; 输出:5&#xff0c;4&#xff0c;3&#xff0c;2&#xff0c;1&#xff1b; 1)我…

从0到1介绍一下开源大数据比对平台dataCompare

1.背景&现状 在大数据领域也已经工作了多年&#xff0c;无论所待过的大公司还是小公司&#xff0c;都会遇到集群升级迁移过程中据搬迁等相关工作&#xff0c;经常会碰到搬迁之后&#xff0c;搬迁的数据是不是能对的上呢&#xff1f;两边数据究竟是不是一致的呢&#xff1f…

javaee之Mybatis4

延迟加载与立即加载的概念 Mybatis中的延迟加载与立即加载 一、一对一实现延迟加载的步骤&#xff08;多对一&#xff0c;看成一对一&#xff09; 我们这里是利用account表中的一个方法来做 先来看IAccountDao里面的一个方法 然后再去看持久层IAccountDao.xml 这个方法给我们…

Linux学习-92-SELinux管理

18 SELinux管理 root 用户在 Linux 系统当中就是无所不能的&#xff0c;而且读、写和执行权限对 root 用户完全没有作用。root 用户的存在极大地方便了 Linux 的管理&#xff0c;但是也造成了一定的安全隐患。绝大多数系统的严重错误都是由于 root 用户的误操作引起的&#xff…

开源项目 Spartacus 的 git 分支使用规范

Spartacus 开源项目里存在如下的 git 分支&#xff1a; feature/GH-xxxx 分支用于简单的功能和错误修复epic/epic-name 分支用于大功能的开发release/1.4.0-rc.0 分支用于特定的发布&#xff08;你可以将它们与维护分支区分开来&#xff0c;因为包含了完整的版本号&#xff09…

压力测试笔记

压测学习 要求&#xff1a;满足100并发500ms性能要求 压测场景 新系统上线支持 在新系统上线前&#xff0c;通过执行性能压测能够对系统的负载能力有较为清晰的认知&#xff0c;从而结合预估的潜在用户数量保障系统上线后的用户体验。技术升级验证 在系统重构过程中&#xf…

Github每日精选(第80期):自动生成命令行python-fire

Python Fire 是一个用于从绝对任何Python对象自动生成命令行界面 (CLI) 的库。 Python Fire 是一种在 Python 中创建 CLI 的简单方法。 [1]Python Fire 是用于开发和调试 Python 代码的有用工具。 [2]Python Fire 有助于探索现有代码或将其他人的代码转换为 CLI。[3]Python Fi…

Co-Scale Conv-Attentional Image Transformers

Co-Scale Conv-Attentional Image Transformers一、引言二、实现方法&#xff08;一&#xff09;、Conv-Attention Module三、Co-Scale Conv-Attentional Transformers&#xff08;一&#xff09;、Co-Scale串行块&#xff08;二&#xff09;、Co-Scale并行块&#xff08;三&am…

跳频和扩频通信

跳频(FH, Frequency Hopping)是指载波频率在很宽频率范围内按某种序列或图案进行跳变&#xff0c;它能进一步提高系统的抗干扰性能。 跳频技术改善了无线信号的传输质量&#xff0c;可以明显地降低同频干扰和频率选择性衰落&#xff0c;为了避免在同一小区或临近小区中&#xf…

无惧管控放开,分享居家办公、远程办公项目经验

国家已经放开疫情管控&#xff0c;随之而来的&#xff0c;是各地大面积的“小阳人”爆发&#xff0c;很多企业不得不重新启动远程办公机制。 云盒子科技拥有良好的的远程办公经验&#xff0c;产品是包含企业云盘、流程审批、邮件、通讯录、企业公告一体化的在线文档协作平台。…