「每日LeetCode」2022年12月21日
本文最后更新于:2023年3月19日 晚上
1753.移除石子的最大得分
1753.移除石子的最大得分
Category | Difficulty | Likes | Dislikes |
---|---|---|---|
algorithms | Medium (63.28%) | 41 | - |
Tags
Companies
你正在玩一个单人游戏,面前放置着大小分别为 a、b 和 c 的 三堆 石子。
每回合你都要从两个 不同的非空堆 中取出一颗石子,并在得分上加 1 分。当存在 两个或更多 的空堆时,游戏停止。
给你三个整数 a 、b 和 c ,返回可以得到的 最大分数 。
示例 1:
输入:a = 2, b = 4, c = 6 输出:6 解释:石子起始状态是 (2, 4, 6) ,最优的一组操作是: - 从第一和第三堆取,石子状态现在是 (1, 4, 5) - 从第一和第三堆取,石子状态现在是 (0, 4, 4) - 从第二和第三堆取,石子状态现在是 (0, 3, 3) - 从第二和第三堆取,石子状态现在是 (0, 2, 2) - 从第二和第三堆取,石子状态现在是 (0, 1, 1) - 从第二和第三堆取,石子状态现在是 (0, 0, 0) 总分:6 分 。
示例 2:
输入:a = 4, b = 4, c = 6 输出:7 解释:石子起始状态是 (4, 4, 6) ,最优的一组操作是: - 从第一和第二堆取,石子状态现在是 (3, 3, 6) - 从第一和第三堆取,石子状态现在是 (2, 3, 5) - 从第一和第三堆取,石子状态现在是 (1, 3, 4) - 从第一和第三堆取,石子状态现在是 (0, 3, 3) - 从第二和第三堆取,石子状态现在是 (0, 2, 2) - 从第二和第三堆取,石子状态现在是 (0, 1, 1) - 从第二和第三堆取,石子状态现在是 (0, 0, 0) 总分:7 分 。
示例 3:
输入:a = 1, b = 8, c = 8 输出:8 解释:最优的一组操作是连续从第二和第三堆取 8 回合,直到将它们取空。 注意,由于第二和第三堆已经空了,游戏结束,不能继续从第一堆中取石子。
提示:
- 1 <= a, b, c <= 105
思路
代码的第一部分声明了一个变量 res,并将其初始化为 0。然后,它创建了一个数组 arr,其中包含了参数 a、b 和 c 的值。接下来,它对数组进行排序,使得数组中的元素从大到小排列。
然后,代码进入了一个无限循环,只有当数组 arr 的第二个元素为 0 且第三个元素为 0 时,才会终止循环。在每次循环中,数组 arr 的第一个元素减去 1,第二个元素减去 1,然后对数组进行排序,使得数组中的元素从大到小排列。最后,变量 res 的值加 1。
最后,函数返回变量 res 的值。
解答
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!