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

Kimi LeetCode 552.学生出勒记录|| public int checkRecord(int n)

我来为你详细解析 LeetCode 552. 学生出勤记录 II 这道动态规划题目。

题目分析

出勤记录规则:

  • P(Present):出席
  • A(Absent):缺勤
  • L(Late):迟到

奖励条件:

  1. 缺勤次数 严格少于 2 次(即A的个数 ≤ 1)
  2. 没有 连续 3 天或以上的迟到(即不能有LLL

求长度为n的可奖励出勤记录的数量,结果对 10^9 + 7 取模。

状态设计

我们需要跟踪两个维度:

  • 缺勤次数:0 次或 1 次
  • 末尾连续迟到次数:0、1 或 2 次

状态定义:dp[i][j][k]表示长度为i的记录中,缺勤j次(0 或 1),且末尾有连续kL(0、1、2)的可奖励记录数。

状态转移

对于每个位置,我们可以选择PAL

当前选择 转移条件 新状态
P无限制dp[i][j][0]+=dp[i-1][j][k](k=0,1,2)
Aj < 1dp[i][1][0]+=dp[i-1][0][k](k=0,1,2)
Lk < 2dp[i][j][k+1]+=dp[i-1][j][k]

Java 代码实现

classSolution{privatestaticfinalintMOD=1_000_000_007;publicintcheckRecord(intn){// dp[j][k]: j表示缺勤次数(0或1), k表示末尾连续L的次数(0,1,2)// 使用滚动数组优化空间long[][]dp=newlong[2][3];// 初始状态:空字符串,0次缺勤,0个连续Ldp[0][0]=1;for(inti=0;i<n;i++){long[][]newDp=newlong[2][3];for(intj=0;j<=1;j++){// 缺勤次数for(intk=0;k<=2;k++){// 连续L次数longval=dp[j][k];if(val==0)continue;// 1. 添加 P (出席): 重置连续L,缺勤次数不变newDp[j][0]=(newDp[j][0]+val)%MOD;// 2. 添加 A (缺勤): 只能在没有缺勤过时添加,重置连续Lif(j==0){newDp[1][0]=(newDp[1][0]+val)%MOD;}// 3. 添加 L (迟到): 连续L次数+1,缺勤次数不变if(k<2){newDp[j][k+1]=(newDp[j][k+1]+val)%MOD;}}}dp=newDp;}// 统计所有合法状态longans=0;for(intj=0;j<=1;j++){for(intk=0;k<=2;k++){ans=(ans+dp[j][k])%MOD;}}return(int)ans;}}

复杂度分析

  • 时间复杂度: O(n),需要遍历n个位置,每个位置处理常数个状态(2×3=6 个)
  • 空间复杂度: O(1),使用滚动数组,只保留两层状态

示例验证

  • n = 2时,答案为8

    • 所有可能:PP,PA,PL,AP,AA,AL,LP,LA,LL
    • 排除AA(2次缺勤),剩余 8 个
  • n = 10101时,答案为183236316

优化版本(矩阵快速幂)

对于极大的n,可以使用矩阵快速幂将时间优化到 O(\log n)。由于状态只有 6 个(2×3),可以构建 6×6 的转移矩阵,但这通常作为进阶优化,面试中先写出 O(n) 的版本即可。

http://www.jsqmd.com/news/489014/

相关文章:

  • c语言-文件读写
  • WPS动态序号填充四种方法,告别手动调整烦恼
  • SOONet效果展示:体育视频中‘发球→扣杀→得分’战术链自动识别与标记
  • 2026年热门的强力工业风扇厂家推荐:永磁工业风扇可靠供应商推荐 - 品牌宣传支持者
  • 【JDK17-HttpClient】 Selector/Channel 的NIO实现细节?与Netty的NIO实现有何异同?
  • 【C++】模版初阶
  • Java对象头:深入理解对象存储的核心机制
  • 【JDK17-HttpClient】零拷贝(Zero-Copy) 支持吗?大文件传输的内存优化机制?
  • 2026年评价高的发酵饲料设备厂家推荐:大型发酵饲料设备/养殖用发酵饲料设备/全自动发酵饲料设备制造厂家推荐 - 品牌宣传支持者
  • Openclaw本地化部署操作手册
  • 2025_NIPS_IR-OptSet: An Optimization-Sensitive Dataset for Advancing LLM-Based IR Optimizer
  • 《深入掌握PostgreSQL数据库》 - 专栏介绍和目录
  • 纳米AI LeetCode 564.寻找最近的回文数 public String nearestPalindromic(String n)
  • OpenClaw 超级 AI 实战专栏【模型推理与实战】(五)推理参数调优:精度、速度、显存平衡
  • 2026年口碑好的小型发酵饲料设备工厂推荐:固态发酵饲料设备/智能发酵饲料设备工厂直供推荐 - 品牌宣传支持者
  • WuliArt Qwen-Image Turbo避坑指南:解决黑图、显存不足等常见问题
  • 2025_NIPS_Praxis-VLM: Vision-Grounded Decision Making via Text-Driven Reinforcement Learning
  • UniG2U-Bench 论文解读:统一多模态模型真的提升了视觉理解吗?
  • OBS怎么调美颜?OBS怎么打开美颜功能?
  • 新媒体内容创作:使用DeOldify为历史题材短视频生成彩色素材
  • SciDER:当AI学会从原始数据开始做科研,GPT-5也得靠边站
  • vim使用verible插件进行verilog语法检查
  • MTP管理培训
  • 【Altium】解决Database连接报错问题
  • python常用库的学习
  • Nacos 3.0新特性解析:为什么控制台端口独立为8080?
  • ROS2 -03-工作空间与功能包
  • Symbol数据类型:特性解析与实战应用
  • C语言文件操作实战:读写二进制图片数据调用DeOldify服务
  • ROS2功能包构建与文件结构解析:从colcon编译到项目部署