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

Leetcode 3664. Two-Letter Card Game

  • Leetcode 3664. Two-Letter Card Game
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3664. Two-Letter Card Game

1. 解题思路

这一题思路上挺直观的,不过翻译到代码上面就啰嗦的很,感觉今天写代码状态不太好……

整体上构造思路的话,我们不妨假设目标字符为a,那么我们要做的就是首先找出以下三种类型的字符:

  • ax
  • xa
  • aa

然后分别对前两者的所有类型的字符进行统计,这里会有两种情况:

  • 如果存在某一种字符串,比如ab,占比超过所有ax类型字符的一半以上,那么他们无法完全内部消化,此时我们需要使用aa类型的字符对其进行弥补;

然后,当所有多余的ax字符以及xa字符都被弥补之后(或者aa字符被完全消耗之后),我们就需要考察剩下的ax字符与xa字符一共能匹配多少个。

此时我们分别使用贪婪算法优先计算ax然后xa以及反向优先xa然后ax两种情况,取其最大值即可。

2. 代码实现

给出python代码实现如下:

class Solution:def score(self, cards: List[str], x: str) -> int:cnt = Counter(cards)st = [it for it in cnt.items() if it[0][0] == x and it[0] != x+x]st = sorted(st, key=lambda x: x[1])st_tot = sum(it[1] for it in st)ed = [it for it in cnt.items() if it[0][1] == x and it[0] != x+x]ed = sorted(ed, key=lambda x: x[1])ed_tot = sum(it[1] for it in ed)bo = cnt[x+x]ans = 0if len(st) > 0 and st[-1][1] > st_tot // 2:ex = min(bo, st[-1][1]*2 - st_tot)st[-1] = (st[-1][0], st[-1][1]-ex)elif len(st) > 0 and st_tot % 2 == 1:ex = min(bo, 1)st[-1] = (st[-1][0], st[-1][1]-ex)else:ex = 0ans += exbo -= exst_tot -= exif len(ed) > 0 and ed[-1][1] > ed_tot // 2:ex = min(bo, ed[-1][1]*2 - ed_tot)ed[-1] = (ed[-1][0], ed[-1][1]-ex)elif len(ed) > 0 and ed_tot % 2 == 1:ex = min(bo, 1)ed[-1] = (ed[-1][0], ed[-1][1]-ex)else:ex = 0ans += exbo -= exed_tot -= exdef count(arr, bo):if len(arr) == 0:return 0, boarr = sorted(arr, key=lambda x: x[1])tot = sum(it[1] for it in arr)if tot // 2 >= arr[-1][1]:ans = tot // 2delta = 0if bo > 0 and tot % 2 == 1:delta = 1bo -= deltaelse:ans = tot - arr[-1][1]delta = arr[-1][1] - ansdelta = min(delta, bo)bo -= deltaif bo > 0 and bo <= 2 * ans:ns = (2*ans + bo) // 2bo = bo - (ns-ans)*2ans = nsans += deltareturn ans, bodef fn(arr1, arr2, bo):s1, bo = count(arr1, bo)s2, bo = count(arr2, bo)return s1 + s2return ans + max(fn(st, ed, bo), fn(ed, st, bo))

提交代码评测得到:耗时68ms,占用内存36.24MB。

http://www.dtcms.com/a/361512.html

相关文章:

  • LeetCode 面试经典 150_滑动窗口_串联所有单词的子串(32_30_C++_困难)(滑动窗口:控制起点和滑动距离)
  • 原位表征技术在水系电池研究稳定性测试中的应用-测试GO
  • 教育 AI 的下半场:个性化学习路径生成背后,技术如何平衡效率与教育本质?
  • 学习日记-spring-day47-9.1
  • 使用LoadBalancer替换Ribbon(五)
  • 深入解析quiche开源项目:从QUIC协议到云原生实践
  • 每日算法题【二叉树】:计算二叉树节点的个数、叶子结点的个数、第k层节点的个数
  • 【面试场景题】不使用redis、zk如何自己开发一个分布式锁
  • 数据库索引失效的原因+示例
  • 视觉引导机械手双夹爪抓取:偏心旋转补偿与逆运动学求解
  • 卷积神经网络训练全攻略:从理论到实战
  • 【K8s】整体认识K8s之Configmap、Secret/ResourceQuota资源配额/访问控制
  • HTTP/2 多路复用
  • [C语言] 结构体 内存对齐规则 内存大小计算
  • 基于springboot生鲜交易系统源码和论文
  • 一文读懂k8s的pv与pvc原理
  • 威科夫与高频因子
  • 2.充分条件与必要条件
  • Android Framework打电话禁止播放运营商视频彩铃
  • Coze源码分析-工作空间-资源库-前端源码
  • Frida Hook 算法
  • 音频数据集采样率选择建议
  • 从网络层接入控制过渡到应用层身份认证的过程
  • 电源相关零碎知识总结
  • 如何把指定阿里云文件夹下的所有文件移动到另一个文件夹下,移动文件时把文件名称(不包括文件后缀)进行md5编码
  • @Autowired注入底层原理
  • 吴恩达机器学习补充:决策树和随机森林
  • AUTOSAR AP R24-11 Log and Trace 文档总结
  • 贪心算法解决钱币找零问题(二)
  • CentOS10安装RabbitMQ