python解题之寻找最大的葫芦
问题描述
问题描述
在一场经典的德州扑克游戏中,有一种牌型叫做“葫芦”。“葫芦”由五张牌组成,其中包括三张相同牌面值的牌 �a 和另外两张相同牌面值的牌 �b。如果两个人同时拥有“葫芦”,我们会优先比较牌 �a 的大小,若牌 �a 相同则再比较牌 �b 的大小,牌面值的大小规则为:1 (A) > K > Q > J > 10 > 9 > ... > 2,其中 1 (A) 的牌面值为1,K 为13,依此类推。
在这个问题中,我们对“葫芦”增加了一个限制:组成“葫芦”的五张牌牌面值之和不能超过给定的最大值 ���max。
给定一组牌,你需要找到符合规则的最大的“葫芦”组合,并输出其中三张相同的牌面和两张相同的牌面。如果找不到符合条件的“葫芦”,则输出 “0, 0”。
测试样例
样例1:
输入:
n = 9, max = 34, array = [6, 6, 6, 8, 8, 8, 5, 5, 1]
输出:[8, 5]
说明:array数组中可组成4个葫芦,分别为[6,6,6,8,8],[6,6,6,5,5],[8,8,8,6,6],[8,8,8,5,5]。其中[8,8,8,6,6]的牌面值为36,大于34不符合要求。剩下的3个葫芦的大小关系为[8,8,8,5,5]>[6,6,6,8,8]>[6,6,6,5,5],故返回[8,5]
样例2:
输入:
n = 9, max = 37, array = [9, 9, 9, 9, 6, 6, 6, 6, 13]
输出:[6, 9]
说明:可组成2个葫芦,分别为[9,9,9,6,6]和[6,6,6,9,9],由于[9,9,9,6,6]的牌面值为39,大于37,故返回[6,9]
样例3:
输入:
n = 9, max = 40, array = [1, 11, 13, 12, 7, 8, 11, 5, 6]
输出:[0, 0]
说明:无法组成任何葫芦,故返回[0,0]
样例4:
输入:
n = 6, max = 50, array = [13, 13, 13, 1, 1, 1]
输出:[1, 13]
说明:可组成两个葫芦,分别为[A,A,A,K,K]和[K,K,K,A,A],两者牌面值都小于50,故都合法。因为三张相同牌面值的A > K,故[A,A,A,K,K]比[K,K,K,A,A]要大,返回[1,13]
为了解决这个问题,我们可以采用以下步骤:
- 排序和计数:首先对给定的牌进行排序,并计算每种牌面值出现的次数。
- 寻找可能的“葫芦”组合:遍历排序后的数组,尝试找到三张相同牌面值的牌(
a),然后继续查找两张相同但不同于a的牌面值的牌(b)。 - 检查总和是否满足条件:对于每一个可能的“葫芦”组合,检查其总和是否不超过
max。 - 记录最优解:如果当前“葫芦”组合是合法的,并且比之前找到的更好(即
a更大,或者a相同而b更大),则更新最优解。 - 返回结果:遍历完成后,返回最优解。如果没有找到任何合法的“葫芦”,则返回
[0, 0]。
下面是 Python 实现代码:
def solution(n: int, max: int, array: list) -> list:assert n == len(array)from collections import Counterc = Counter(array)vals = [1, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]for x in vals:for y in vals:if x * 3 + y * 2 <= max and c[x] >= 3 and c[y] >= 2 and x != y:return [x, y]return [0, 0]if __name__ == '__main__':print(solution(n = 9, max = 34, array = [6, 6, 6, 8, 8, 8, 5, 5, 1]) == [8, 5])print(solution(n = 9, max = 37, array = [9, 9, 9, 9, 6, 6, 6, 6, 13]) == [6, 9])print(solution(n = 9, max = 40, array = [1, 11, 13, 12, 7, 8, 11, 5, 6]) == [0, 0])
解题过程
- 统计牌面值数量:使用
Counter统计每种牌面值的数量。 - 遍历所有可能的牌面值组合:通过双层循环遍历所有可能的牌面值组合 (x,y),其中 x 代表三张相同牌面值的牌,y 代表两张相同牌面值的牌。
- 检查条件:对于每个组合 (x,y),检查是否满足以下条件:
- x×3+y×2≤max:五张牌的牌面值之和不超过最大值 max。
- c[x]≥3:牌面值为 x 的牌数量至少为 3。
- c[y]≥2:牌面值为 y 的牌数量至少为 2。
- x=y:三张相同牌面值的牌和两张相同牌面值的牌不能相同。
- 返回结果:如果找到符合条件的组合,返回 [x,y];否则返回 [0,0]。
复杂度分析
- 时间复杂度:O(n+k2),其中 n 是牌的数量,k 是牌面值的种类数(本题中 k=13)。首先需要 O(n) 的时间统计每种牌面值的数量,然后需要 O(k2) 的时间遍历所有可能的牌面值组合。
- 空间复杂度:O(k),主要用于存储每种牌面值的数量。
知识点扩展
- 哈希表:在本题中,使用
Counter统计每种牌面值的数量,这是一种典型的哈希表应用。哈希表可以在 O(1) 的时间复杂度内完成插入和查找操作,非常适合用于统计和计数问题。 - 双层循环:通过双层循环遍历所有可能的牌面值组合,这是一种常见的暴力枚举方法。虽然时间复杂度较高,但在本题中由于牌面值种类数 k 较小,因此是可行的。
相关文章:
python解题之寻找最大的葫芦
问题描述 问题描述 在一场经典的德州扑克游戏中,有一种牌型叫做“葫芦”。“葫芦”由五张牌组成,其中包括三张相同牌面值的牌 �a 和另外两张相同牌面值的牌 �b。如果两个人同时拥有“葫芦”,我们会优先比较牌 &#…...
iOS 环境搭建教程
本文档将详细介绍如何在 macOS 上搭建 iOS 开发环境,以便进行 React Native 开发。(为了保证环境一致 全部在网络通畅的情况下运行) 1. 安装 Homebrew Homebrew 是 macOS 的包管理工具,我们将通过它来安装开发所需的工具。 安装…...
制作容器镜像
容器基础镜像制作 由于项目使用麒麟操作系统,需要在麒麟桌面操作系统和服务器操作系统里编译代码,如果每次都在物理机和虚拟机里编译太不方便,也无法使用常用的 jenkins k8s 组成的 CI/CD 编译环境,如果基于整个ISO太大了&#…...
基于Python对xslxslx文件进行操作
利用python操作表格文件 读取xsl格式文件-源码 import xlrd# 读取xls文件中的工作对象 wb xlrd.open_workbook(示例文件/xxx物理学与信息技术学院.xls) print(wb)# 获取所有的工作表名称 sheet_names wb.sheet_names() # print(sheet_names)# 选择要读取的具体工作表对象 s…...
语音芯片赋能可穿戴设备:开启个性化音频新体验
在科技日新月异的今天,语音芯片与可穿戴设备的携手合作,正引领我们步入一个前所未有的个性化音频时代。这一创新融合,用户可以享受到更加个性化、沉浸式的音频体验。下面将详细介绍语音芯片与可穿戴设备合作的优点和具体应用。 1. 定制化音效…...
Unity学习笔记(一)如何实现物体之间碰撞
前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 如何实现物体之间碰撞 实现物体之间的碰撞关键组件:Rigidbody 2D(刚体)、Collider 2D(碰撞体)、Sprite Renderer(Sprite渲染器) 实现物体之间的碰撞 …...
LinkedList与链表 和 链表面试题
目录 一. ArrayList 与 LinkedList 的优缺点: 二. LinkedList 的分类 三.链表的十道面试题: 1. 删除链表中等于给定值 val 的所有节点。题目链接 2. 反转⼀个单链表。题目链接 3. 输⼊⼀个链表,输出该链表中倒数第k个结点。题目链接 4.给定…...
ansible自动化运维(一)简介及清单,模块
相关文章ansible自动化运维(二)playbook模式详解-CSDN博客ansible自动化运维(三)jinja2模板&&roles角色管理-CSDN博客ansible自动化运维(四)运维实战-CSDN博客 ansible自动化运维工具 1.什么是自…...
利用代理IP爬取Zillow房产数据用于数据分析
引言 最近数据分析的热度在编程社区不断攀升,有很多小伙伴都开始学习或从事数据采集相关的工作。然而,网站数据已经成为网站的核心资产,许多网站都会设置一系列很复杂的防范措施,阻止外部人员随意采集其数据。为了解决这个问题&a…...
大屏开源项目go-view二次开发1----环境搭建(C#)
最近公司要求做一个大屏的程序用于展示公司的产品,我以前也没有相关的经验,最糟糕的是公司没有UI设计的人员,领导就一句话要展示公司的产品,具体展示的内容细节也不知道,全凭借自己发挥。刚开始做时是用wpf做的&#x…...
【含开题报告+文档+PPT+源码】基于微信小程序的点餐系统的设计与实现
开题报告 随着互联网技术的日益成熟和消费者生活水平与需求层次的显著提升,外卖点餐平台在中国市场上迅速兴起并深深植根于民众日常生活的各个角落。这类平台的核心在于构建了一个基于互联网的强大订餐服务系统,它无缝整合了餐饮商户资源与广大消费者的…...
k8s中用filebeat文件如何收集不同service的日志
以下是一个详细的从在 Kubernetes 集群中部署 Filebeat,到实现按web-oper、web-api微服务分离日志并存储到不同索引的完整方案: 理解需求:按服务分离日志索引 在 Kubernetes 集群中,有web-oper和web-api两种微服务,希…...
Mysql数据库中,什么情况下设置了索引但无法使用?
在MySQL数据库中,即使已经正确设置了索引,但在某些情况下索引可能无法被使用。 以下是一些常见的情况: 1. 数据分布不均匀 当某个列的数据分布非常不均匀时,索引可能无法有效地过滤掉大部分的数据,导致索引失效。 …...
QT6学习第十一天 Qt Quick控件 Control
QT6学习第十一天 Qt Quick控件控件基类 Control按钮类控件指示器类控件输入类控件日期类控件 Qt Quick控件 Qt Quick本身是为了移动触摸界面而生的,但Qt的跨平台性也决定了它需要支持多种系统。为了支持桌面平台开发,从Qt 5.1开始,增加了新的…...
【唐叔学算法】第16天:枚举-探索所有可能性的艺术
大家好,我是唐叔。今天我们要探讨的是一个看似简单却非常实用的概念——枚举(Enumeration)。它不仅仅是一种数据类型,在算法设计中也是一种解决问题的策略。通过系统地遍历所有可能的情况,我们可以找到满足特定条件的答…...
【OpenCV】基于GrabCut算法的交互式前景提取
介绍 GrabCut 算法是一种用于图像分割的交互式前景提取技术,它结合了图割(Graph Cut)方法和迭代优化过程。该算法最初由 Rother, Kolmogorov 和 Blake 在 2004 年提出,并因其高效性和准确性而被广泛应用于计算机视觉领域。OpenCV…...
【Flask+OpenAI】利用Flask+OpenAI Key实现GPT4-智能AI对话接口demo - 从0到1手把手全教程(附源码)
文章目录 前言环境准备安装必要的库 生成OpenAI API代码实现详解导入必要的模块创建Flask应用实例配置OpenAI API完整代码如下(demo源码)代码解析 利用Postman调用接口 了解更多AI内容结尾 前言 Flask作为一个轻量级的Python Web框架,凭借其…...
最短路----Dijkstra算法详解
简介 迪杰斯特拉(Dijkstra)算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。它是由荷兰计算机科学家艾兹格迪科斯彻(Edsger Dijkstra)在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉…...
ORB-SLAM3源码学习:G2oTypes.cc: void EdgeInertial::computeError 计算预积分残差
前言 这部分函数涉及了g2o的内容以及IMU相关的推导内容,需要你先去进行这部分的学习。 1.函数声明 void EdgeInertial::computeError() 2.函数定义 涉及到的IMU的公式: {// TODO Maybe Reintegrate inertial measurments when difference between …...
Unity协程机制详解
Unity的协程(Coroutine)是一种异步编程的机制,允许在多个帧之间分割代码的执行,而不阻塞主线程。与传统的多线程不同,Unity的协程在主线程中运行,并不会开启新的线程。 什么是协程? 协程是一种…...
抖音资源下载新体验:douyin-downloader一站式解决方案
抖音资源下载新体验:douyin-downloader一站式解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppo…...
动物森友会存档编辑神器:NHSE新手完全入门指南
动物森友会存档编辑神器:NHSE新手完全入门指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否曾经梦想过在《集合啦!动物森友会》中拥有无限铃钱、稀有家具…...
职场新人不会写自我介绍怎么办?AI三分钟帮你搞定,面试邀约直接翻倍!
嘿,各位刚踏入职场的小萌新、想跳槽但又苦于没新项目亮点的打工人!你是不是也遇到过这种尴尬:辛辛苦苦写完简历,最后却卡在“自我介绍”或者“个人总结”那块? 要么就是寥寥几句套话,像“本人性格开朗&…...
WeChatFerry:微信机器人自动化框架的终极技术指南
WeChatFerry:微信机器人自动化框架的终极技术指南 【免费下载链接】WeChatFerry 微信机器人,可接入DeepSeek、Gemini、ChatGPT、ChatGLM、讯飞星火、Tigerbot等大模型。微信 hook WeChat Robot Hook. 项目地址: https://gitcode.com/GitHub_Trending/w…...
还在为图表制作烦恼?Mermaid Live Editor让你3分钟搞定专业图表
还在为图表制作烦恼?Mermaid Live Editor让你3分钟搞定专业图表 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-li…...
从0到1:如何用MNBVC超大规模中文语料库训练你的中文大模型
从0到1:如何用MNBVC超大规模中文语料库训练你的中文大模型 【免费下载链接】MNBVC MNBVC(Massive Never-ending BT Vast Chinese corpus)超大规模中文语料集。对标chatGPT训练的40T数据。MNBVC数据集不但包括主流文化,也包括各个小众文化甚至火星文的数据…...
Montserrat可变字体深度解析:实现响应式排版的最佳实践
Montserrat可变字体深度解析:实现响应式排版的最佳实践 【免费下载链接】Montserrat 项目地址: https://gitcode.com/gh_mirrors/mo/Montserrat Montserrat字体项目是一款源自布宜诺斯艾利斯传统街区的开源字体,以其独特的城市排版风格和灵活的可…...
AltStore技术深度解析:非越狱iOS侧载方案实战指南
AltStore技术深度解析:非越狱iOS侧载方案实战指南 【免费下载链接】AltStore AltStore is an alternative app store for non-jailbroken iOS devices. 项目地址: https://gitcode.com/gh_mirrors/al/AltStore 在iOS生态系统中,应用分发一直受到A…...
STL转STEP格式转换实战指南:如何实现CAD模型的无缝迁移与工程化应用
STL转STEP格式转换实战指南:如何实现CAD模型的无缝迁移与工程化应用 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 在数字化制造与工程设计领域,STL格式作为3D打印的标…...
Midjourney拍立得风格失效预警:当--stylize值>800时,胶片颗粒算法将触发不可逆失真(附修复补丁)
更多请点击: https://intelliparadigm.com 第一章:Midjourney拍立得风格失效的本质洞察 当用户在 Midjourney 中反复使用 --style raw 或添加 Polaroid、 Instax、 instant film 等关键词却无法稳定生成具有真实拍立得质感的图像时,问题并…...
