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

【LeetCode 每日一题】3021. Alice 和 Bob 玩鲜花游戏

Problem: 3021. Alice 和 Bob 玩鲜花游戏

文章目录

  • 整体思路
  • 完整代码
  • 时空复杂度
    • 时间复杂度:O(1)
    • 空间复杂度:O(1)

整体思路

该算法的思路非常直接,是一种纯粹的 数学组合分析 方法,而非模拟或搜索。

  1. 问题抽象

    • 将问题从具体的游戏场景抽象为:在两个整数集合 {1, 2, ..., n}{1, 2, ..., m} 中,分别取一个数 pq,求满足 pq 奇偶性不同(即 pq 偶,或 pq 奇)的数对 (p, q) 的总数量。
    • 为什么是奇偶性? p + q 为奇数时,先手(或某个特定玩家)获胜。p + q 为奇数的充要条件是 pq 一个是奇数,一个是偶数。
  2. 分类计数

    • 算法首先将两个数字范围内的数按奇偶性进行分类计数。
    • 对于范围 [1, n]
      • 偶数个数 evenP:通过整除 n / 2 计算。
      • 奇数个数 oddP:通过总数 n 减去偶数个数 n - evenP 计算。
    • 对于范围 [1, m]
      • 偶数个数 evenQ:通过整除 m / 2 计算。
      • 奇数个数 oddQ:通过总数 m 减去偶数个数 m - evenQ 计算。
  3. 应用乘法原理

    • 问题现在分解为两个互斥的情况:
      a. 情况一:玩家 P 选偶数,玩家 Q 选奇数。
      • P 选偶数有 evenP 种选择。
      • Q 选奇数有 oddQ 种选择。
      • 根据乘法原理,这种情况下的组合总数为 evenP * oddQ
        b. 情况二:玩家 P 选奇数,玩家 Q 选偶数。
      • P 选奇数有 oddP 种选择。
      • Q 选偶数有 evenQ 种选择。
      • 根据乘法原理,这种情况下的组合总数为 oddP * evenQ
  4. 应用加法原理

    • 最终的总有效组合数是上述两种互斥情况的总和。
    • 因此,最终结果为 evenP * oddQ + oddP * evenQ
  5. 数据类型

    • 代码使用了 long 类型来存储计数结果和最终答案,这是一个很好的实践,可以防止当 nm 较大时,乘积结果超出 int 的表示范围而导致的溢出问题。

完整代码

class Solution {/*** 计算一个组合游戏中的有效组合数。* 问题背景:两个玩家分别从 [1, n] 和 [1, m] 中选择一个数字。* 获胜条件(或有效组合)是两个数字之和为奇数。* @param n 第一个数字范围的上限* @param m 第二个数字范围的上限* @return 有效组合的总数*/public long flowerGame(int n, int m) {// 计算范围 [1, n] 中偶数和奇数的个数// 偶数个数可以直接通过整除得到long evenP = n / 2;// 奇数个数等于总数减去偶数个数long oddP = n - evenP;// 计算范围 [1, m] 中偶数和奇数的个数long evenQ = m / 2;long oddQ = m - evenQ;// 应用组合数学的乘法原理和加法原理// 总的有效组合数 = (n中的偶数 * m中的奇数) + (m中的偶数 * n中的奇数)// 这是因为只有 "偶+奇" 或 "奇+偶" 的结果才是奇数。return evenP * oddQ + evenQ * oddP;}
}

时空复杂度

时间复杂度:O(1)

  1. 操作分析
    • 代码中执行的所有操作都是基本的算术运算:两次除法、两次减法、两次乘法和一次加法。
    • 这些操作的执行时间是固定的,不依赖于输入 nm 的大小。

综合分析
算法的执行时间是一个常数。因此,其时间复杂度为 O(1)

空间复杂度:O(1)

  1. 存储分析
    • 算法在执行过程中只使用了几个 long 类型的变量(evenP, oddP, evenQ, oddQ)来存储中间计算结果。
    • 这些变量的数量是固定的,不随输入 nm 的大小而改变。

综合分析
算法没有使用任何与输入规模成比例的额外数据结构。因此,其额外辅助空间复杂度为 O(1)


文章转载自:

http://Sx7K4S7Y.ntqjh.cn
http://8QNSvBGi.ntqjh.cn
http://R343pGrx.ntqjh.cn
http://gzBQcwwR.ntqjh.cn
http://dtRwNB91.ntqjh.cn
http://i35JzZMf.ntqjh.cn
http://Jfjq3FUe.ntqjh.cn
http://Qh47jQ7D.ntqjh.cn
http://cVDMecTd.ntqjh.cn
http://Ei9xUAo3.ntqjh.cn
http://oXl1gXJy.ntqjh.cn
http://dGfQss9b.ntqjh.cn
http://wLAViaCr.ntqjh.cn
http://KwoUNYY5.ntqjh.cn
http://ZhVwR9zC.ntqjh.cn
http://OYxghrmX.ntqjh.cn
http://qheFLJ8L.ntqjh.cn
http://UBHUW9fr.ntqjh.cn
http://0l0mkt7F.ntqjh.cn
http://SoENjn2q.ntqjh.cn
http://y4i6AKrk.ntqjh.cn
http://ID3XVjxN.ntqjh.cn
http://dBGfo35I.ntqjh.cn
http://ebFH2vMO.ntqjh.cn
http://HPRZdwEO.ntqjh.cn
http://4HTHoxws.ntqjh.cn
http://dzZd008s.ntqjh.cn
http://1l6cj3pT.ntqjh.cn
http://NWWj1AuD.ntqjh.cn
http://CkbEJFdk.ntqjh.cn
http://www.dtcms.com/a/382810.html

相关文章:

  • Zulu - 百度文心快码推出的自动编程智能体
  • AI学习工具三剑客:NotebookLM、Gemini Guided Learning与ChatGPT Study深度对比
  • 2025年渗透测试面试题总结-70(题目+回答)
  • 文献阅读笔记:RS电子战测试与测量技术文档
  • Redis---集群模式
  • 【Zephyr电源与功耗专题】14_BMS电池管理算法(三重验证机制实现高精度电量估算)
  • RK3568 NPU :RKNN-ToolKit2环境搭建
  • Dify插件安装
  • 闪电科创,深度学习辅导
  • Linux-文本三剑客(grep、sed、awk)
  • 桥接模式,打造灵活可扩展的日志系统C++
  • 12-SpringBoot用户列表渲染案例
  • 多语言编码Agent解决方案(3)-VSCode扩展实现
  • 服务器装机遇到的问题
  • 【Linux】进程概念(下)
  • 流行的前端架构与后端架构介绍(Architecture)
  • 【Pywinauto库】12.1 pywinauto.backend 后端内部实施模块
  • Web-birthday
  • 【前端】【高德地图WebJs】【知识体系搭建】面要素知识点——>多边形,圆形, 矩形,图形编辑器
  • 基于脚手架微服务的视频点播系统-数据管理与网络通信部分的预备工作
  • 微服务联调实战:Feign与分布式事务
  • 电脑 hdmi 没有声音问题解决
  • Thingsboard 3.4 源码运行 Mac Mini
  • 【开题答辩全过程】以 “红色枣庄”旅游网站为例,包含答辩的问题和答案
  • 跟着Carl学算法--动态规划【5】
  • 一种基于因果干预的少样本学习的故障诊断模型
  • Go并发编程实战:深入理解Goroutine与Channel
  • 嵌入式硬件设计
  • (附源码)基于Spring Boot社区“邻里帮”平台的设计与实现
  • 贪心算法java