当前位置: 首页 > news >正文

找到最大“葫芦”组合

文章目录

      • 问题描述
      • 解题思路分析
        • 1. 数据预处理
        • 2. 特殊情况处理
        • 3. 普通情况计算
        • 4. 结果输出
      • Java代码实现
      • 复杂度分析与优化

在经典德州扑克中,“葫芦”是一种较强的牌型。它由五张牌组成,其中三张牌面值相同,另外两张牌面值也相同。本文将探讨一个有趣的变形问题:在限定总牌面值的情况下,如何找到符合规则的最大“葫芦”组合。

问题描述

我们需要从给定的一组牌中找到一个满足以下条件的“葫芦”组合:

  1. 该组合由三张相同牌面值的牌 (a) 和两张相同牌面值的牌 (b) 组成;
  2. 牌面值的总和不能超过指定的最大值 max
  3. 在多个可能组合中,优先选择牌面值 (a) 较大的组合,若 (a) 相同则选择 (b) 较大的组合。

牌面值遵循德州扑克的大小规则,即 A(1)> K(13)> Q(12)> J(11)> 10 > 9 > … > 2。

解题思路分析

1. 数据预处理

首先,我们需要统计输入牌组中每张牌的数量。这样做可以快速识别哪些牌出现了三次及以上(用于构成牌 (a)),哪些牌出现了两次及以上(用于构成牌 (b))。通过一个哈希映射(HashMap)来实现统计,能够保证在 (O(n)) 时间复杂度内完成遍历和计数。

2. 特殊情况处理

根据题目中的描述,A牌(1)具有特殊的地位。为了最大化组合的大小,我们需优先考虑是否能使用A作为三张牌或两张牌的一部分,并在满足条件的情况下更新“葫芦”组合的值。

  1. 若 A 出现了三次或更多:则A可能作为三张牌中的 (a)。在这种情况下,我们需要在其他牌中找到数量至少为2的牌 (b),并确保该组合的牌面和在最大值 max 之内。
  2. 若 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}));}}

复杂度分析与优化

  1. 时间复杂度:主循环遍历了牌组中的元素并将其计数,复杂度为 (O(n))。随后对计数结果进行两重嵌套的选择(在所有可能的三张和两张牌中查找最大组合),这部分复杂度约为 (O(k^2)),其中 (k) 是去重后牌面值的数量。
  2. 空间复杂度:使用了一个 HashMap 来存储牌的计数,空间复杂度为 (O(k))。

外链:找到最大“葫芦”组合

相关文章:

找到最大“葫芦”组合

文章目录 问题描述解题思路分析1. 数据预处理2. 特殊情况处理3. 普通情况计算4. 结果输出 Java代码实现复杂度分析与优化 在经典德州扑克中&#xff0c;“葫芦”是一种较强的牌型。它由五张牌组成&#xff0c;其中三张牌面值相同&#xff0c;另外两张牌面值也相同。本文将探讨一…...

shell(9)完结

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…...

【计算机网络】多路转接之select

系统提供select()来实现多路转接 IO 等 拷贝 -> select()只负责等待&#xff0c;可以一次等待多个fd select()本身没有数据拷贝的能力&#xff0c;拷贝要read()/write()来完成 一、select的使用 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exc…...

数据库-基础理论

文章目录 前言一、ORM框架二、ACID原则三、事务Transaction四、N1问题五、Normalization三范式六、FMEA方法论&#xff08;Failure Mode and Effects Analysis&#xff09;七、Profiling和PerformanceSchema查询分析 前言 基础理论 ORM框架、ACID原则、事务Transaction、N1问…...

Linux——1_系统的延迟任务及定时任务

系统的延迟任务及定时任务 在系统中我们的维护工作大多数时在服务器行对闲置时进行 我们需要用延迟任务来解决自动进行的一次性的维护 延迟任务时一次性的&#xff0c;不会重复执行 当延迟任务产生输出后&#xff0c;这些输出会以邮件的形式发送给延迟任务发起者 在RHEL9中…...

C++ 矩阵旋转

【问题描述】 编写一个程序&#xff0c;读入一个矩阵&#xff0c;输出该矩阵以第一行第一列数字为中心&#xff0c;顺时针旋转90度后的新矩阵&#xff0c;例如&#xff1a; 输入的矩阵为: 1 2 3 4 5 6 顺时针旋转90度后输出的矩阵为&#xff1a; 4 1 5 2 6 3 【输入…...

Docker学习笔记整理

这周不知道写点啥内容做个分享&#xff0c;但还是秉持学会分享的精神&#xff0c;粗略放一些Docker相关的问题和解答吧&#xff0c;后面有机会再补补再深挖深挖o(>﹏<)o 1. 容器VS虚拟机 虚拟机是一种带环境安装的解决方案&#xff08;资源完全隔离&#xff09;,有以下缺…...

计算机组成原理期末试题三(含答案)

本科生期末试卷 三 一&#xff0e;选择题&#xff08;每小题1分&#xff0c;共10分&#xff09; 1&#xff0e;冯诺依曼机工作的基本方式的特点是______。 A 多指令流单数据流 B 按地址访问并顺序执行指令 C 堆栈操作 D 存贮器按内容选择地址 2&#xff0e;在机器数______中&a…...

django+boostrap实现注册

一、django介绍 Django 是一个高级的 Python 网络框架&#xff0c;可以快速开发安全和可维护的网站。由经验丰富的开发者构建&#xff0c;Django 负责处理网站开发中麻烦的部分&#xff0c;因此你可以专注于编写应用程序&#xff0c;而无需重新开发。 它是免费和开源的&#x…...

C++初阶——类和对象(下)

目录 1、再探构造函数——初始化列表 2、类型转换 3、static成员 4、友元 5、内部类 6、匿名对象 7、对象拷贝时编译器的优化(了解) 1、再探构造函数——初始化列表 1. 构造函数初始化除了使用函数体内赋值&#xff0c;还有一种方式——初始化列表&#xff0c; 初始化列…...

趋势洞察|AI 能否带动裸金属 K8s 强势崛起?

随着容器技术的不断成熟&#xff0c;不少企业在开展私有化容器平台建设时&#xff0c;首要考虑的问题就是容器的部署环境——是采用虚拟机还是物理机运行容器&#xff1f;在往期“虚拟化 vs. 裸金属*”系列文章中&#xff0c;我们分别对比了容器部署在虚拟化平台和物理机上的架…...

idea初始化设置

下载idea&#xff1a; https://www.jetbrains.com/idea/ 安装idea 安装插件&#xff1a; Rainbow BracketsLombokMybatisXSonarLintMaven HelperCodeGeeX&#xff08;国内AI插件可用&#xff09; 设置idea注释模板&#xff1a; 设置代码注释模板&#xff1a; https://blo…...

LINUX系统编程之——环境变量

目录 环境变量 1、基本概念 2、查看环境变量的方法 三、查看PATH环境变量的內容 1&#xff09;不带路径也能运行的自己的程序 a、将自己的程序直接添加到PATH指定的路径下 b、将程序所在的路径添加到PATH环境中 四、环境变量与本地变量 1、本地变量创建 2、环境变量创…...

健康老龄化:适合老年人的播客

什么是播客 什么是播客&#xff1f;好问题。对于那些还不熟悉这个术语的人来说&#xff0c;播客有点像在线广播或电视节目。这是一个可下载、可流式传输的程序&#xff0c;定期发布剧集&#xff0c;时长从几分钟到一个多小时不等。您可以在计算机、智能手机或平板电脑上…...

家庭智慧工程师:如何通过科技提升家居生活质量

在今天的数字化时代&#xff0c;家居生活已经不再只是简单的“住”的地方。随着物联网&#xff08;IoT&#xff09;、人工智能&#xff08;AI&#xff09;以及自动化技术的快速发展&#xff0c;越来越多的家庭开始拥抱智慧家居技术&#xff0c;将他们的家变得更加智能化、便捷和…...

Milvus概念

非结构化数据、嵌入和 Milvus 非结构化数据&#xff08;如文本、图像、音频&#xff09;格式多样&#xff0c;蕴含丰富的语义信息&#xff0c;使其分析变得复杂。为了管理这种复杂性&#xff0c;嵌入技术被用来将非结构化数据转换为数值向量&#xff0c;这些向量能够捕捉数据的…...

为什么调用 setState 而不是直接改变 state

在React中&#xff0c;调用setState方法而不是直接改变state的原因涉及多个方面&#xff0c;包括性能优化、状态管理的可预测性、React的设计理念等。以下是对这些原因的详细解释&#xff1a; 1. 性能优化 异步更新与批量处理&#xff1a;setState是异步执行的&#xff0c;Rea…...

【Python爬虫五十个小案例】爬取豆瓣电影Top250

博客主页&#xff1a;小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介&#xff1a;分享五十个Python爬虫小案例 &#x1fab2;前言 在这篇博客中&#xff0c;我们将学习如何使用Python爬取豆瓣电影Top250的数据。我们将使用requests库来发送HTTP请求&#xff0c;…...

cocos creator 3.8 物理碰撞器Collider+刚体RigidBody 8

遇到一个朋友&#xff0c;你来就行的朋友&#xff0c;我过去了&#xff0c;管吃管住&#xff0c;这样的朋友真的很难求。 最近离职了&#xff0c;很难想象&#xff0c;一份策划书一天能给你改n次&#xff0c;一周能郁闷&#xff0c;上一个功能没搞完&#xff0c;让你搞下一个功…...

Python爬取豆瓣电影全部分类数据并存入数据库

在当今数字化的时代&#xff0c;网络上丰富的影视资源信息吸引着众多开发者去挖掘和利用。今天&#xff0c;我就来和大家分享一段有趣的代码&#xff0c;它能够从豆瓣电影平台获取相关数据并存储到数据库中哦。 结果展示&#xff08;文末附完整代码&#xff09;&#xff1a; 目…...

Taotoken 平台在应对突发流量时 API 路由与容灾的实际表现观察

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken 平台在应对突发流量时 API 路由与容灾的实际表现观察 1. 背景与场景 近期&#xff0c;我们团队负责的一款应用进行了产品…...

多路召回RAG系统

项目采用 多路召回 Rerank的RAG架构&#xff0c;核心入口是 RagSpecialistAgent.java&#xff0c;当用户与问答助手进行语言交流时&#xff0c;输入查询&#xff0c;首先先进行意图识别&#xff0c;判断是单任务还是多任务&#xff0c;并且判断是否需要RAG检索&#xff0c;因为…...

响应安全规程硬性要求,无感定位规范井下人员管理 ——矿山合规化人员智能管控技术方案

响应安全规程硬性要求&#xff0c;无感定位规范井下人员管理——矿山合规化人员智能管控技术方案一、方案引言国家矿山安全相关规程规范、地方煤炭行业监管条例&#xff0c;对井下人员在岗管控、动态监测、危险行为约束、应急人员统计等方面划定明确硬性执行标准。历次安全检查…...

长期使用Taotoken Token Plan套餐对项目预算管理的帮助

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Taotoken Token Plan套餐对项目预算管理的帮助 对于需要持续调用大模型API的项目而言&#xff0c;成本的可预测性与可控性…...

高性能日志分析系统架构设计:LogExpert企业级监控解决方案

高性能日志分析系统架构设计&#xff1a;LogExpert企业级监控解决方案 【免费下载链接】LogExpert Windows tail program and log file analyzer. 项目地址: https://gitcode.com/gh_mirrors/lo/LogExpert LogExpert是一款专为Windows平台设计的高性能图形化日志分析工具…...

ModTheSpire终极指南:安全加载杀戮尖塔模组的5大步骤

ModTheSpire终极指南&#xff1a;安全加载杀戮尖塔模组的5大步骤 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是一款专为《杀戮尖塔》设计的Java游戏模组加载器&#xf…...

基于特征图的机器学习模型选择:从静态规则到动态适应

1. 项目概述&#xff1a;从“凭感觉”到“有章法”的模型选择在机器学习项目的实战中&#xff0c;最让人头疼的环节之一&#xff0c;往往不是调参&#xff0c;而是最初那个看似简单的问题&#xff1a;我该用哪个模型&#xff1f;面对Scikit-Learn库里琳琅满目的算法&#xff0c…...

Selenium显式等待原理与四大高频场景实战

1. 为什么“等一下”比“点一下”更难写对在 Java Selenium 的自动化脚本里&#xff0c;我见过太多人把driver.findElement(By.id("submit")).click()写得行云流水&#xff0c;结果一跑就报NoSuchElementException或ElementNotInteractableException——不是元素不存…...

机器学习势函数与反向蒙特卡洛在GeO2玻璃中程有序结构建模中的对比研究

1. 项目概述与核心问题 在材料模拟领域&#xff0c;我们常常面临一个经典困境&#xff1a;如何从有限的实验数据中&#xff0c;构建出既符合物理规律又贴近真实情况的三维原子结构模型&#xff1f;这个问题在非晶态材料&#xff0c;尤其是像二氧化锗&#xff08;GeO2&#xff0…...

qmcdump:3分钟学会的QQ音乐加密文件免费解码终极指南

qmcdump&#xff1a;3分钟学会的QQ音乐加密文件免费解码终极指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否…...