2327-知道秘密的人数
2327-知道秘密的人数
题目描述
在第
1天,有一个人发现了一个秘密。给你一个整数
delay,表示每个人会在发现秘密后的delay天之后,每天 给一个新的人 分享 秘密。同时给你一个整数forget,表示每个人在发现秘密forget天之后会 忘记 这个秘密。一个人 不能 在忘记秘密那一天及之后的日子里分享秘密。给你一个整数
n,请你返回在第n天结束时,知道秘密的人数。由于答案可能会很大,请你将结果对109 + 7取余 后返回。示例 1:
输入:
n = 6, delay = 2, forget = 4
输出:5
解释:第 1 天:假设第一个人叫 A 。(一个人知道秘密)第 2 天:A 是唯一一个知道秘密的人。(一个人知道秘密)第 3 天:A 把秘密分享给 B 。(两个人知道秘密)第 4 天:A 把秘密分享给一个新的人 C 。(三个人知道秘密)第 5 天:A 忘记了秘密,B 把秘密分享给一个新的人 D 。(三个人知道秘密)第 6 天:B 把秘密分享给 E,C 把秘密分享给 F 。(五个人知道秘密)示例 2:
输入:
n = 4, delay = 1, forget = 3
输出:6
解释:第 1 天:第一个知道秘密的人为 A 。(一个人知道秘密)第 2 天:A 把秘密分享给 B 。(两个人知道秘密)第 3 天:A 和 B 把秘密分享给 2 个新的人 C 和 D 。(四个人知道秘密)第 4 天:A 忘记了秘密,B、C、D 分别分享给 3 个新的人。(六个人知道秘密)提示:
2 <= n <= 10001 <= delay < forget <= n
题解
使用动态规划方法解决秘密传播问题。每个人在知道秘密后的第delay天开始可以分享秘密,
在知道秘密后的第forget天会忘记秘密。
算法思路:
- 使用dp数组记录每天新增知道秘密的人数
- 对于每一天,计算能够分享秘密的人所带来的新知道秘密的人数
- 最后统计在第n天仍然记得秘密的人数总和
1 | package com.loltoulan.leetcode; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 可乐大红袍🥤🥤🥤!
