Kimi    LeetCode LCP 36. 最多牌组数 Java实现
根据已收集的信息我来为你提供 LCP 36. 最多牌组数 的 Java 实现。题目分析这道题是经典的麻将牌组最大化问题每组牌可以是- 刻子三张相同数值的牌如 [7,7,7]- 顺子三张连续数值的牌如 [4,5,6]核心难点贪心策略不成立。例如 [1,1,1,2,2,2,3,4,4,4]优先顺子只能得到2组但最优解是3组刻子而 [1,1,1,2,2,3,3]优先刻子只能得到1组但最优解是2组顺子 [1,2,3],[1,2,3]。因此需要使用 动态规划 来解决。DP 状态设计设 dp[i][t1][t2] 表示处理到第 i 种牌按数值排序去重后- t1 以 [i-1, i, i1] 形式开头的顺子数量即用到当前牌 i 和下一个牌 i1 的顺子数- t2 以 [i, i1, i2] 形式开头的顺子数量关键观察3个顺子等价于3个刻子所以每种顺子数量只需枚举 0, 1, 2 三种情况。Java 实现javaimport java.util.*;class Solution {// 初始化一个3x3的DP数组初始值为负无穷表示不可达private int[][] getArr() {int[][] res new int[3][3];for (int i 0; i 3; i) {for (int j 0; j 3; j) {res[i][j] Integer.MIN_VALUE;}}return res;}public int maxGroupNumber(int[] tiles) {// 1. 排序并统计每种牌的出现次数Arrays.sort(tiles);int[] nums new int[tiles.length]; // 去重后的牌面值int[] cnt new int[tiles.length]; // 每种牌的出现次数int idx 0;for (int i 0; i tiles.length; i) {if (i 0 || tiles[i] ! tiles[i - 1]) {nums[idx] tiles[i];cnt[idx] 1;idx;} else {cnt[idx - 1];}}// 2. DP 转移// prev[t1][t2]: 上一个牌面值的状态// next[t1][t2]: 当前牌面值的状态int[][] prev null;int[][] next getArr();int prevK -1; // 上一个处理的牌面值next[0][0] 0; // 初始状态0个顺子0个组for (int i 0; i idx; i) {prev next;next getArr();if (prevK 1 nums[i]) {// 当前牌与上一个牌面值连续可以形成顺子// t1: 以 [i-1, i, i1] 开头的顺子数用到当前牌和下一个牌// t2: 以 [i, i1, i2] 开头的顺子数// t3: 以 [i-2, i-1, i] 开头的顺子数来自prev的状态for (int t1 0; t1 3; t1) {for (int t2 0; t2 3; t2) {for (int t3 0; t3 3; t3) {// t3个顺子 [i-2,i-1,i] 消耗了t3张当前牌// t1个顺子 [i-1,i,i1] 消耗了t1张当前牌// t2个顺子 [i,i1,i2] 消耗了t2张当前牌// 剩余牌组成刻子if (t1 t2 t3 cnt[i]) {next[t1][t2] Math.max(next[t1][t2],prev[t3][t1] t3 (cnt[i] - t1 - t2 - t3) / 3);}}}}} else {// 当前牌与上一个牌面值不连续无法形成跨牌面的顺子// 只能将当前牌的剩余部分组成刻子// t1: 以 [i, i1, i2] 开头的顺子数留给下一个连续牌用for (int t1 0; t1 cnt[i] t1 3; t1) {next[0][t1] prev[0][0] (cnt[i] - t1) / 3;}}prevK nums[i];}// 最终答案处理完所有牌后没有未完成的顺子return next[0][0];}}关键点解释要点 说明状态压缩 dp[t1][t2] 只需3x3因为3个顺子3个刻子顺子数只需枚举02离散化 先排序去重将 tiles 转为 (数值, 次数) 的数组连续性判断 prevK 1 nums[i] 判断当前牌与上一个是否连续转移方程 next[t1][t2] max(prev[t3][t1] t3 (cnt[i]-t1-t2-t3)/3)不连续处理 牌面值不连续时无法形成顺子只能做刻子且 t1 必须为0复杂度分析- 时间复杂度O(N \log N U \times 27)其中 N 为 tiles.lengthU 为不同牌面值的数量。排序 O(N \log N)DP 转移每层27种状态。- 空间复杂度O(N)用于存储去重后的数组和DP状态。示例验证示例1tiles [2,2,2,3,4]- 排序后2(3张), 3(1张), 4(1张)- 最优[2,2,2] 刻子 或 [2,3,4] 顺子输出 1 ✓示例2tiles [2,2,2,3,4,1,3]- 排序后1(1张), 2(3张), 3(2张), 4(1张)- 最优[1,2,3] [2,3,4]输出 2 ✓

相关新闻

随机森林特征重要性解析:从基尼与排列重要性到业务决策

随机森林特征重要性解析:从基尼与排列重要性到业务决策

1. 项目概述:从“黑箱”到“可解释”的决策森林在机器学习的实际项目里,我们常常会遇到一个尴尬的局面:模型预测效果不错,但老板或者业务方总会追问一句——“这个模型是怎么做出判断的?哪个因素最重要?” …

2026/8/23 19:25:12 阅读更多 →
掌握这套方法,5分钟写出高质量的课题选题依据

掌握这套方法,5分钟写出高质量的课题选题依据

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 每篇学术论文、每个科研项目的选题依据,其实都有一套固定的逻辑。…

2026/8/23 19:25:12 阅读更多 →
DHCP三剑客配置(3)

DHCP三剑客配置(3)

前面文章我们我们介绍了华三的dhcp三剑客(DHCP三剑客-DHCP服务器全局配置DHCP中继DHCP Snooping配置)和(DHCP三剑客配置(2)),温故而知新,我们继续学习一下锐捷的配置方式 一 DHCP服务器配置 ! service d…

2026/8/23 19:25:12 阅读更多 →

最新新闻

论文AI率过高怎么办?2026年12款免费降AI率工具实测指南

论文AI率过高怎么办?2026年12款免费降AI率工具实测指南

现在毕业论文答辩前,“AI率超标”已经彻底取代“查重率过高”,成了同学们的头号难题!不少同学只是用AI润色了摘要和结论,AI率直接飙升到离谱,纯手动修改根本不管用——这说明AIGC检测系统抓的不是个别词语,…

2026/8/23 23:59:54 阅读更多 →
Marketch:从Sketch画板直接量取CSS

Marketch:从Sketch画板直接量取CSS

Marketch:从Sketch画板直接量取CSS 【免费下载链接】marketch Marketch is a Sketch 3 plug-in for automatically generating html page that can measure and get CSS styles on it. 项目地址: https://gitcode.com/gh_mirrors/ma/marketch 设计稿交付还在…

2026/8/23 23:59:54 阅读更多 →
如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南 【免费下载链接】ThinkpadX390-Opencore-EFI macOS Catalina & Big Sur & Monterey on ThinkPad X390 (Hackintosh) 项目地址: https://gitcode.com/gh_mirrors/th/ThinkpadX390-Opencore-EFI …

2026/8/23 23:59:54 阅读更多 →
WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化 【免费下载链接】WechatHook Enjoy hooking wechat by Xposed....Accessibility...and so on... 项目地址: https://gitcode.com/gh_mirrors/we/WechatHook WechatHook 是一个基于 Xpos…

2026/8/23 23:59:54 阅读更多 →
OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan OpenModScan 是一款开源免…

2026/8/23 23:59:54 阅读更多 →
Gin-JWT认证与授权方案从Token到RBAC权限控制

Gin-JWT认证与授权方案从Token到RBAC权限控制

Gin-JWT认证与授权方案从Token到RBAC权限控制 文章导语 JWT(JSON Web Token)是现代Web服务的身份认证标准。在Gin框架中集成JWT看似简单,但涉及Token刷新、黑名单、多设备登录、RBAC权限控制等实际需求时,就需要更完善的设计。本文…

2026/8/23 23:57:54 阅读更多 →

日新闻

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →