找到最大“葫芦”组合
文章目录
- 问题描述
- 解题思路分析
- 1. 数据预处理
- 2. 特殊情况处理
- 3. 普通情况计算
- 4. 结果输出
- Java代码实现
- 复杂度分析与优化
在经典德州扑克中,“葫芦”是一种较强的牌型。它由五张牌组成,其中三张牌面值相同,另外两张牌面值也相同。本文将探讨一个有趣的变形问题:在限定总牌面值的情况下,如何找到符合规则的最大“葫芦”组合。
问题描述
我们需要从给定的一组牌中找到一个满足以下条件的“葫芦”组合:
- 该组合由三张相同牌面值的牌 (a) 和两张相同牌面值的牌 (b) 组成;
- 牌面值的总和不能超过指定的最大值
max; - 在多个可能组合中,优先选择牌面值 (a) 较大的组合,若 (a) 相同则选择 (b) 较大的组合。
牌面值遵循德州扑克的大小规则,即 A(1)> K(13)> Q(12)> J(11)> 10 > 9 > … > 2。
解题思路分析
1. 数据预处理
首先,我们需要统计输入牌组中每张牌的数量。这样做可以快速识别哪些牌出现了三次及以上(用于构成牌 (a)),哪些牌出现了两次及以上(用于构成牌 (b))。通过一个哈希映射(HashMap)来实现统计,能够保证在 (O(n)) 时间复杂度内完成遍历和计数。
2. 特殊情况处理
根据题目中的描述,A牌(1)具有特殊的地位。为了最大化组合的大小,我们需优先考虑是否能使用A作为三张牌或两张牌的一部分,并在满足条件的情况下更新“葫芦”组合的值。
- 若 A 出现了三次或更多:则A可能作为三张牌中的 (a)。在这种情况下,我们需要在其他牌中找到数量至少为2的牌 (b),并确保该组合的牌面和在最大值
max之内。 - 若 A 出现了两次:则A可能作为两张牌中的 (b)。在这种情况下,我们需要在其他牌中找到数量至少为3的牌 (a),并判断该组合是否符合最大值要求。
3. 普通情况计算
当 A 不能参与组合或未能找到符合条件的组合时,我们可以在其他牌中寻找“葫芦”:
- 从具有三张相同牌面值的牌中选择最大的作为 (a);
- 从具有两张相同牌面值的牌中选择最大的作为 (b);
- 比较多个组合的总和,以确保不会超过最大值
max。
4. 结果输出
在所有符合条件的“葫芦”组合中,我们输出最大牌面值的 (a) 和 (b) 值,若没有符合条件的组合则输出 [0, 0]。
Java代码实现
以下是完整的 Java 实现代码:
import java.util.HashMap;
import java.util.Map;public class bigestHulu {public static int[] solution(int n, int max, int[] array) {// 由于最大A的牌面值为1,所以要特殊考虑// 1. 首先用map记录array中每个元素出现的次数Map<Integer, Integer> map = new HashMap<>();// 为了后面特殊考虑map.put(1,0);for (int card : array) {map.put(card, map.getOrDefault(card, 0) + 1);}int x = 0; // 三张相同的牌面值int y = 0; // 两张相同的牌面值// 2.1 A出现3次以上if (map.get(1) >= 3){// 遍历map,找到最大的bfor (Integer b : map.keySet()) {if (b != 1 && map.get(b) >= 2){// 没有爆牌if (1 * 3 + b * 2 <= max){if (b > y){x = 1;y = b;}}}}return new int[]{x, y};}// 2.2 A出现2次if (map.get(1) == 2){// 遍历map,找到最大的bfor (Integer b : map.keySet()) {if (b != 1 && map.get(b) >= 3){// 没有爆牌if (1 * 2 + b * 3 <= max){if (b > y){x = b;y = 1;}}}}return new int[]{x, y};}// 3. A不被选择的情况for (Integer a : map.keySet()) {if (map.get(a) >= 3){for (Integer b : map.keySet()) {if (b != a && map.get(b) >= 2){// 没有爆牌if (a * 3 + b * 2 <= max){// 规则是优先比较牌a的大小,若牌a相同则再比较牌b的大小if (a > x || (a == x && b > y)){x = a;y = b;}}}}}}if (x == 0 && y == 0){return new int[]{0, 0};}else {return new int[]{x, y};}}public static void main(String[] args) {// Add your test cases hereSystem.out.println(java.util.Arrays.equals(solution(9, 34, new int[]{6, 6, 6, 8, 8, 8, 5, 5, 1}), new int[]{8, 5}));System.out.println(java.util.Arrays.equals(solution(9, 37, new int[]{9, 9, 9, 9, 6, 6, 6, 6, 13}), new int[]{6, 9}));System.out.println(java.util.Arrays.equals(solution(9, 40, new int[]{1, 11, 13, 12, 7, 8, 11, 5, 6}), new int[]{0, 0}));}}
复杂度分析与优化
- 时间复杂度:主循环遍历了牌组中的元素并将其计数,复杂度为 (O(n))。随后对计数结果进行两重嵌套的选择(在所有可能的三张和两张牌中查找最大组合),这部分复杂度约为 (O(k^2)),其中 (k) 是去重后牌面值的数量。
- 空间复杂度:使用了一个 HashMap 来存储牌的计数,空间复杂度为 (O(k))。
外链:找到最大“葫芦”组合
相关文章:
找到最大“葫芦”组合
文章目录 问题描述解题思路分析1. 数据预处理2. 特殊情况处理3. 普通情况计算4. 结果输出 Java代码实现复杂度分析与优化 在经典德州扑克中,“葫芦”是一种较强的牌型。它由五张牌组成,其中三张牌面值相同,另外两张牌面值也相同。本文将探讨一…...
shell(9)完结
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
【计算机网络】多路转接之select
系统提供select()来实现多路转接 IO 等 拷贝 -> select()只负责等待,可以一次等待多个fd select()本身没有数据拷贝的能力,拷贝要read()/write()来完成 一、select的使用 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exc…...
数据库-基础理论
文章目录 前言一、ORM框架二、ACID原则三、事务Transaction四、N1问题五、Normalization三范式六、FMEA方法论(Failure Mode and Effects Analysis)七、Profiling和PerformanceSchema查询分析 前言 基础理论 ORM框架、ACID原则、事务Transaction、N1问…...
Linux——1_系统的延迟任务及定时任务
系统的延迟任务及定时任务 在系统中我们的维护工作大多数时在服务器行对闲置时进行 我们需要用延迟任务来解决自动进行的一次性的维护 延迟任务时一次性的,不会重复执行 当延迟任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者 在RHEL9中…...
C++ 矩阵旋转
【问题描述】 编写一个程序,读入一个矩阵,输出该矩阵以第一行第一列数字为中心,顺时针旋转90度后的新矩阵,例如: 输入的矩阵为: 1 2 3 4 5 6 顺时针旋转90度后输出的矩阵为: 4 1 5 2 6 3 【输入…...
Docker学习笔记整理
这周不知道写点啥内容做个分享,但还是秉持学会分享的精神,粗略放一些Docker相关的问题和解答吧,后面有机会再补补再深挖深挖o(>﹏<)o 1. 容器VS虚拟机 虚拟机是一种带环境安装的解决方案(资源完全隔离),有以下缺…...
计算机组成原理期末试题三(含答案)
本科生期末试卷 三 一.选择题(每小题1分,共10分) 1.冯诺依曼机工作的基本方式的特点是______。 A 多指令流单数据流 B 按地址访问并顺序执行指令 C 堆栈操作 D 存贮器按内容选择地址 2.在机器数______中&a…...
django+boostrap实现注册
一、django介绍 Django 是一个高级的 Python 网络框架,可以快速开发安全和可维护的网站。由经验丰富的开发者构建,Django 负责处理网站开发中麻烦的部分,因此你可以专注于编写应用程序,而无需重新开发。 它是免费和开源的&#x…...
C++初阶——类和对象(下)
目录 1、再探构造函数——初始化列表 2、类型转换 3、static成员 4、友元 5、内部类 6、匿名对象 7、对象拷贝时编译器的优化(了解) 1、再探构造函数——初始化列表 1. 构造函数初始化除了使用函数体内赋值,还有一种方式——初始化列表, 初始化列…...
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
随着容器技术的不断成熟,不少企业在开展私有化容器平台建设时,首要考虑的问题就是容器的部署环境——是采用虚拟机还是物理机运行容器?在往期“虚拟化 vs. 裸金属*”系列文章中,我们分别对比了容器部署在虚拟化平台和物理机上的架…...
idea初始化设置
下载idea: https://www.jetbrains.com/idea/ 安装idea 安装插件: Rainbow BracketsLombokMybatisXSonarLintMaven HelperCodeGeeX(国内AI插件可用) 设置idea注释模板: 设置代码注释模板: https://blo…...
LINUX系统编程之——环境变量
目录 环境变量 1、基本概念 2、查看环境变量的方法 三、查看PATH环境变量的內容 1)不带路径也能运行的自己的程序 a、将自己的程序直接添加到PATH指定的路径下 b、将程序所在的路径添加到PATH环境中 四、环境变量与本地变量 1、本地变量创建 2、环境变量创…...
健康老龄化:适合老年人的播客
什么是播客 什么是播客?好问题。对于那些还不熟悉这个术语的人来说,播客有点像在线广播或电视节目。这是一个可下载、可流式传输的程序,定期发布剧集,时长从几分钟到一个多小时不等。您可以在计算机、智能手机或平板电脑上…...
家庭智慧工程师:如何通过科技提升家居生活质量
在今天的数字化时代,家居生活已经不再只是简单的“住”的地方。随着物联网(IoT)、人工智能(AI)以及自动化技术的快速发展,越来越多的家庭开始拥抱智慧家居技术,将他们的家变得更加智能化、便捷和…...
Milvus概念
非结构化数据、嵌入和 Milvus 非结构化数据(如文本、图像、音频)格式多样,蕴含丰富的语义信息,使其分析变得复杂。为了管理这种复杂性,嵌入技术被用来将非结构化数据转换为数值向量,这些向量能够捕捉数据的…...
为什么调用 setState 而不是直接改变 state
在React中,调用setState方法而不是直接改变state的原因涉及多个方面,包括性能优化、状态管理的可预测性、React的设计理念等。以下是对这些原因的详细解释: 1. 性能优化 异步更新与批量处理:setState是异步执行的,Rea…...
【Python爬虫五十个小案例】爬取豆瓣电影Top250
博客主页:小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介:分享五十个Python爬虫小案例 🪲前言 在这篇博客中,我们将学习如何使用Python爬取豆瓣电影Top250的数据。我们将使用requests库来发送HTTP请求,…...
cocos creator 3.8 物理碰撞器Collider+刚体RigidBody 8
遇到一个朋友,你来就行的朋友,我过去了,管吃管住,这样的朋友真的很难求。 最近离职了,很难想象,一份策划书一天能给你改n次,一周能郁闷,上一个功能没搞完,让你搞下一个功…...
Python爬取豆瓣电影全部分类数据并存入数据库
在当今数字化的时代,网络上丰富的影视资源信息吸引着众多开发者去挖掘和利用。今天,我就来和大家分享一段有趣的代码,它能够从豆瓣电影平台获取相关数据并存储到数据库中哦。 结果展示(文末附完整代码): 目…...
Taotoken 平台在应对突发流量时 API 路由与容灾的实际表现观察
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken 平台在应对突发流量时 API 路由与容灾的实际表现观察 1. 背景与场景 近期,我们团队负责的一款应用进行了产品…...
多路召回RAG系统
项目采用 多路召回 Rerank的RAG架构,核心入口是 RagSpecialistAgent.java,当用户与问答助手进行语言交流时,输入查询,首先先进行意图识别,判断是单任务还是多任务,并且判断是否需要RAG检索,因为…...
响应安全规程硬性要求,无感定位规范井下人员管理 ——矿山合规化人员智能管控技术方案
响应安全规程硬性要求,无感定位规范井下人员管理——矿山合规化人员智能管控技术方案一、方案引言国家矿山安全相关规程规范、地方煤炭行业监管条例,对井下人员在岗管控、动态监测、危险行为约束、应急人员统计等方面划定明确硬性执行标准。历次安全检查…...
长期使用Taotoken Token Plan套餐对项目预算管理的帮助
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Taotoken Token Plan套餐对项目预算管理的帮助 对于需要持续调用大模型API的项目而言,成本的可预测性与可控性…...
高性能日志分析系统架构设计:LogExpert企业级监控解决方案
高性能日志分析系统架构设计:LogExpert企业级监控解决方案 【免费下载链接】LogExpert Windows tail program and log file analyzer. 项目地址: https://gitcode.com/gh_mirrors/lo/LogExpert LogExpert是一款专为Windows平台设计的高性能图形化日志分析工具…...
ModTheSpire终极指南:安全加载杀戮尖塔模组的5大步骤
ModTheSpire终极指南:安全加载杀戮尖塔模组的5大步骤 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是一款专为《杀戮尖塔》设计的Java游戏模组加载器…...
基于特征图的机器学习模型选择:从静态规则到动态适应
1. 项目概述:从“凭感觉”到“有章法”的模型选择在机器学习项目的实战中,最让人头疼的环节之一,往往不是调参,而是最初那个看似简单的问题:我该用哪个模型?面对Scikit-Learn库里琳琅满目的算法,…...
Selenium显式等待原理与四大高频场景实战
1. 为什么“等一下”比“点一下”更难写对在 Java Selenium 的自动化脚本里,我见过太多人把driver.findElement(By.id("submit")).click()写得行云流水,结果一跑就报NoSuchElementException或ElementNotInteractableException——不是元素不存…...
机器学习势函数与反向蒙特卡洛在GeO2玻璃中程有序结构建模中的对比研究
1. 项目概述与核心问题 在材料模拟领域,我们常常面临一个经典困境:如何从有限的实验数据中,构建出既符合物理规律又贴近真实情况的三维原子结构模型?这个问题在非晶态材料,尤其是像二氧化锗(GeO2࿰…...
qmcdump:3分钟学会的QQ音乐加密文件免费解码终极指南
qmcdump:3分钟学会的QQ音乐加密文件免费解码终极指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否…...
