字节青训-寻找最大葫芦
问题描述
在一场经典的德州扑克游戏中,有一种牌型叫做“葫芦”。“葫芦”由五张牌组成,其中包括三张相同牌面值的牌 aa 和另外两张相同牌面值的牌 bb。如果两个人同时拥有“葫芦”,我们会优先比较牌 aa 的大小,若牌 aa 相同则再比较牌 bb 的大小。
在这个问题中,我们对“葫芦”增加了一个限制:组成“葫芦”的五张牌牌面值之和不能超过给定的最大值 maxmax。牌面值的大小规则为:A > K > Q > J > 10 > 9 > ... > 2,其中 A 的牌面值为1,K 为13,依此类推。
给定一组牌,你需要找到符合规则的最大的“葫芦”组合,并输出其中三张相同的牌面和两张相同的牌面。如果找不到符合条件的“葫芦”,则输出 “0, 0”。
测试样例
样例1:
输入:
n = 9, max = 34, array = [6, 6, 6, 8, 8, 8, 5, 5, 1]
输出:[8, 5]样例2:
输入:
n = 9, max = 37, array = [9, 9, 9, 9, 6, 6, 6, 6, 13]
输出:[6, 9]样例3:
输入:
n = 9, max = 40, array = [1, 11, 13, 12, 7, 8, 11, 5, 6]
输出:[0, 0]
解题思路:
问题理解
我们需要找到一组牌中符合“葫芦”规则的最大组合。具体来说,“葫芦”由三张相同牌面值的牌和两张相同牌面值的牌组成,并且这五张牌的牌面值之和不能超过给定的最大值 max。
数据结构选择
-  
牌面值的映射:由于牌面值的大小规则是 A > K > Q > J > 10 > 9 > ... > 2,我们可以使用一个映射来表示这些牌面值,例如:
unordered_map<int, int> cardValue = {{1, 14}, // A{13, 13}, // K{12, 12}, // Q{11, 11}, // J{10, 10}, // 10{9, 9}, // 9{8, 8}, // 8{7, 7}, // 7{6, 6}, // 6{5, 5}, // 5{4, 4}, // 4{3, 3}, // 3{2, 2} // 2 };这样我们可以方便地比较牌面值的大小。
 -  
牌的计数:我们可以使用一个
std::unordered_map<int, int>来统计每种牌面值的出现次数。 
算法步骤
- 统计每种牌面值的出现次数:遍历输入的牌数组,统计每种牌面值的出现次数。
 - 寻找符合条件的“葫芦”: 
- 遍历统计结果,找到所有出现次数大于等于3的牌面值,记为 
a。 - 对于每个 
a,再遍历统计结果,找到所有出现次数大于等于2的牌面值,记为b。 - 计算 
a和b的牌面值之和,如果不超过max,则记录这个组合。 
 - 遍历统计结果,找到所有出现次数大于等于3的牌面值,记为 
 - 选择最大的“葫芦”:在所有符合条件的组合中,选择牌面值最大的 
a和b。 
转换成python的最终代码:
from collections import defaultdictdef solution(n, max_sum, array):# 牌面值的映射card_value = {1: 14,  # A13: 13, # K12: 12, # Q11: 11, # J10: 10, # 109: 9,   # 98: 8,   # 87: 7,   # 76: 6,   # 65: 5,   # 54: 4,   # 43: 3,   # 32: 2    # 2}# 统计每种牌面值的出现次数count = defaultdict(int)for card in array:count[card] += 1# 寻找符合条件的“葫芦”max_a = -1max_b = -1for a, count_a in count.items():if count_a >= 3:for b, count_b in count.items():if a != b and count_b >= 2:# 计算牌面值之和sum_value = card_value[a] * 3 + card_value[b] * 2if sum_value <= max_sum:# 更新最大组合if max_a == -1 or card_value[a] > card_value[max_a] or \(card_value[a] == card_value[max_a] and card_value[b] > card_value[max_b]):max_a = amax_b = b# 返回结果if max_a == -1 and max_b == -1:return [0, 0]else:return [max_a, max_b]# 测试用例
result1 = solution(9, 34, [6, 6, 6, 8, 8, 8, 5, 5, 1])
print(result1 == [8, 5])result2 = solution(9, 37, [9, 9, 9, 9, 6, 6, 6, 6, 13])
print(result2 == [6, 9])result3 = solution(9, 40, [1, 11, 13, 12, 7, 8, 11, 5, 6])
print(result3 == [0, 0]) 
到这里我以为就完了,谁知道!!!,这题面都还有坑

一开始还以为是测试用例有问题呢,看了好一会才反应过来,A这张牌,它是所有牌中最大的,但是它的牌面却是最小的,nndx,我以为只是默认A是最大的牌呢,这题太害人了
找到问题就好办了,也就是说要特判一次,如果P[1]的数量是大于等于3的,那就直接用它当maxA,如果是小于3但是大于等于2的,直接用来当maxB;
AC代码:
from collections import defaultdictdef solution(n, max_sum, array):# 牌面值的映射card_value = {1: 14,  # A13: 13, # K12: 12, # Q11: 11, # J10: 10, # 109: 9,   # 98: 8,   # 87: 7,   # 76: 6,   # 65: 5,   # 54: 4,   # 43: 3,   # 32: 2    # 2}# 统计每种牌面值的出现次数count = defaultdict(int)for card in array:adjusted_card = card if card != 1 else 14count[adjusted_card] += 1# 寻找符合条件的“葫芦”num3 = 0num2 = 0current_sum = 0for key, value in count.items():if value >= 3:for other_key, other_value in count.items():if other_key != key and other_value >= 2:sum_value = calculate_sum(key if key != 14 else 1, other_key if other_key != 14 else 1)if sum_value <= max_sum:if key > num3 or (key == num3 and other_key > num2):num3 = keynum2 = other_keycurrent_sum = sum_value# 返回结果if current_sum > 0:return [num3 if num3 != 14 else 1, num2 if num2 != 14 else 1]else:return [0, 0]def calculate_sum(num1, num2):return num1 * 3 + num2 * 2# 测试用例
result1 = solution(9, 34, [6, 6, 6, 8, 8, 8, 5, 5, 1])
print(result1 == [8, 5])result2 = solution(9, 37, [9, 9, 9, 9, 6, 6, 6, 6, 13])
print(result2 == [6, 9])result3 = solution(9, 40, [1, 11, 13, 12, 7, 8, 11, 5, 6])
print(result3 == [0, 0]) 
运行结果:
舒服了

相关文章:
字节青训-寻找最大葫芦
问题描述 在一场经典的德州扑克游戏中,有一种牌型叫做“葫芦”。“葫芦”由五张牌组成,其中包括三张相同牌面值的牌 aa 和另外两张相同牌面值的牌 bb。如果两个人同时拥有“葫芦”,我们会优先比较牌 aa 的大小,若牌 aa 相同则再比…...
el-checkbox勾选一个变成了勾选所有
问题: el-checkbox完成后勾选一个选项变成了所有选项都勾选了。非model值不正确,我的model值绑定的是数组,但是还是勾选一个变成了勾选多个。 解决 因为勾选的内容比较简单,且值不需要入库,所以我最开始定义的option为…...
ExpandingCard扩展卡片
文章目录 演示效果分析思路核心代码总结 源码 演示效果 分析思路 使用flex布局,每个卡片的宽度都由flex进行灵活调整交互可以增加和删除active,来实现宽度扩增和恢复还需要使用transition进行动画过渡,使得平滑切换 核心代码 首先创建一个…...
移远通信推出八款天线新品,覆盖5G、4G、Wi-Fi和LoRa领域
近日,全球领先的物联网整体解决方案供应商移远通信宣布,再次推出八款高性能天线新品,进一步丰富其天线产品阵容,更好地满足全球客户对高品质天线的更多需求。具体包括5G超宽带天线YECT005W1A和YECT004W1A、5G天线YECT028W1A、4G天…...
MySQL 9从入门到性能优化-创建触发器
【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...
UE5 第三人称学习之动画 control rig
这个东西和建模软件里有的是一个东西,然后IK就是你动脚,他帮你算出小腿大腿该怎么动,FK就是你自己动了大腿,摆小腿,然后再摆脚 就是给每一根骨骼搞一个控制器,给他一个容易选中和操作更明显的图形作为控制…...
C++之--初见模板初阶
一、泛型编程 为了实现一个通用的函数,在此之前,我们学过函数重载,使用函数重载虽然可以实现,但是有一下几个不好的地方: 1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时&a…...
Nature|用于无线监测颅内信号的植入式柔性超声波传感器(柔性传感/健康监测/植入式电子/水凝胶)
华中科技大学臧剑锋(Jianfeng Zang)、华中科技大学同济医学院附属协和医院姜晓兵(Xiaobing Jiang)和新加坡南洋理工大学陈晓东(Xiaodong Chen)团队,在《Nature》上发布了一篇题为“Injectable ultrasonic sensor for wireless monitoring of intracranial signals”的论…...
【和AI的《趣味》聊天】01 AI:你找茬是吧(
我: 以下哪个选项是中文? A.Chinese B.英文 AI: 我: 这不对吧,我说的是那个选项的语言是中文 AI: 非常抱歉,我之前的回答有误。您问的是哪个选项的语言是中文,那么答案应该是…...
“发放父作业单”是“过数”用例里面的内容吗
刘京城 2020-4-14 23:01 。。。。(注:这是一个人的昵称,不是省略号) 首先,执行者是同一个,那么思考焦点要关注“过数”用例是不是“发放父作业单”用例的一个步骤,和行为操作的频率无关,而是和责任有关&am…...
Linux补基础之:网络配置
目录 一、检查主机与虚拟机是否能正常通信 二、网络的连接模式 桥接模式 流程 特点 NAT模式 流程 特点 仅主机 流程 特点 三、修改静态IP 四、可能遇到的问题 防火墙 DNS 五、主机名更改 六、登录服务器 实际的大数据管理中,会有由很多服务器构成的…...
【flink】之kafka到kafka
一、概述 本文档旨在介绍如何使用Apache Flink从Kafka接收数据流,并将处理后的数据写入到另一个Kafka Topic中。Apache Flink是一个开源的流处理框架,能够处理无界和有界数据流,并且支持高吞吐量和低延迟的数据处理。通过Flink与Kafka的集成…...
微信小程序时间弹窗——年月日时分
需求 1、默认当前时间2、选择时间弹窗限制最大值、最小值3、每次弹起更新最大值为当前时间,默认值为上次选中时间4、 minDate: new Date(2023, 10, 1).getTime(),也可以传入时间字符串new Date(2023-10-1 12:22).getTime() html <view class"flex bb ptb…...
杂货 | 每日资讯 | 2024.11.1
注意:以下内容皆为AI总结 2024年11月1日,人工智能(AI)领域发生了多项重要事件,标志着技术发展的新阶段。本文将详细探讨以下三大事件: OpenAI为ChatGPT新增搜索功能IEEE发布《2025年及以后的技术影响》报…...
Genmoai-smol:专为单 GPU 优化的开源 AI 视频生成模型,低显存生成高质量视频
❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦! 🥦 微信公众号ÿ…...
RHCE8
一、防火墙 防火墙:防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。防火墙又可以分为硬件防火墙与软件防火墙。 硬件防火墙是由厂商设计好的主机硬件,这台硬件防火墙的操作系统主要以提供数据…...
长短期记忆网络(LSTM)如何在连续的时间步骤中处理信息
长短期记忆网络(LSTM)如何在连续的时间步骤中处理信息 长短期记忆网络(LSTM)是一种高级的循环神经网络(RNN),设计用来解决传统RNN在处理长时间序列数据时遇到的梯度消失或爆炸问题。LSTM通过其…...
MySQL基础(三)
一. 插入内容insert tips: (一)SQL中 表示 字符串,可以用 也可以用 " C/C、Java中, 表示字符," 表示字符串SQL/Python/JS,没有字符类型,只有字符串, 和 &qu…...
浏览器八股
面试系列文章 万字总结我在寒冬里的面试准备经历前端铜九铁十面试必备八股文——【HTML&CSS】前端铜九铁十面试必备八股文——【JavaScript】前端铜九铁十面试必备八股文——【Vue】前端铜九铁十面试必备八股文——【浏览器】前端铜九铁十面试必备八股文——【网络相关】前…...
华为机试HJ18 识别有效的IP地址和掩码并进行分类统计
首先看一下题 描述 请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。 所有的IP地址划分为 A,B,C,D,E五类 A类地址从1.0.0.0到126.255.255.255; B类地址从128.0.0.0到191.255.255.255; C类地址从192.0.…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
