6109. 知道秘密的人数
题目(中等)
查qq秘密的作者的方法如下:首先从空间的秘密里边找到一个小秘密。然后点击进入小秘密,最后长按小秘密后会出现选择复制与保存离线网页的选项卡,点击保存离线网页选项。跳转到QQ空间进行保存,保存之后即可以在QQ浏览器里找到。
在第 1 天,有一个人发现了一个秘密。
给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后,每天 给一个新的人 分享 秘密。同时给你一个整数 forget ,表示每个人在发现秘密 forget 天之后会 忘记 这个秘密。一个人 不能 在忘记秘密那一天及之后的日子里分享秘密。
给你一个整数 n ,请你返回在第 n 天结束时,空间秘密怎么知道是谁评论的,知道秘密的人数。由于答案可能会很大,请你将结果对 109+ 7 取余 后返回。
示例 1:
示例 2:
提示:
1 <= delay < forget <= n
解题思路
方法一:动态规划
设 f(i) 表示第 i 天新增知道秘密的人数。
状态转移:
根据题意,第 i 天能分享秘密的人为没忘记秘密并且知道秘密过了 delay 天的人,即 [i-forget+1,i-delay] 时间内的人,第 i 天新增的人数即为这段时间中的人数,因为这段时间的人会在第 i 天分享秘密给一个人。递推公式为:
初始化:f(1) = 1
题目要求第 n 天结束还知道秘密的人,答案为 [n-forget+1,n] 时间内新增的人数之和,即:
复杂度分析
空间秘密知道是谁的方法是:打开qq空间,点击发现,小秘密,找到自己发布的秘密,点击匿名评论人的头像,即可私信问对方是谁,当然要对方愿意说,否则自己是不能明确对方是谁。QQ空间(Qzone)是腾讯公司在2005年开发出来的一。
时间复杂度:。
空间复杂度:。
1、首先打开qq空间,然后点击图中线框,从那里直接进入空间中的匿名小秘密。2、进入到匿名小秘密后,可以看到很多人发出的各种匿名的小秘密,找到右上角的铃铛装的标识点击进入。3、点击铃铛状的标志,如果自己曾经也发过匿。
方法二:动态规划 + 前缀和
1、登录手机qq空间,从玩吧进入到小秘密,在这里使用的是最新版本,小伙伴们若找不到玩吧功能是需要下载最新版本的哦!2、点击进入后,会发现有许多匿名人发表的小秘密,点击右上角小铃铛的图标。3、点击进入后,你会发现。
复杂度分析
时间复杂度:。
QQ想知道这些秘密是谁发的,首先,找到背景图片的小秘密,然后找到原始代码,最后,通过MHT文件,可以看到以UIN开头的代码,具体步骤如下:1、找一个小秘密与背景图片的空间。2、然后点击进入小秘密,出现如下界面,点击“保。
空间复杂度:。
首先呢,就是从空间里边找一个有背景图片的小秘密。然后点击进入小秘密,最后长按小秘密,就会出现如下图所示界面,点击“保存离线网页”(手机必须得安装QQ浏览器)。跳转到QQ空间进行保存,保存之后即可以在QQ浏览器里找到。
代码
class Solution { public int peopleAwareOfSecret(int n,int delay,int forget) { final long MOD = 1000000007; long[] dp = new long[n + 1]; dp[1] = 1; for (int i = 2; i <= n; i++) { for (int j = Math.max(i - forget + 1,1); j < i - delay; j++) { dp[i] = (dp[i] + dp[j]) % MOD; } } long ans = 0; for (int i = n - forget + 1; i <= n; i++) { ans = (ans + dp[i]) % MOD; } return (int) ans; } }
class Solution { public int peopleAwareOfSecret(int n,int delay,int forget) { final long MOD = 1000000007; long[] sum = new long[n + 1]; sum[1] = 1; for (int i = 2; i <= n; i++) { int l = Math.max(i - forget,0); int r = Math.max(i - delay,0); long f = (sum[r] - sum[l] + MOD) % MOD; sum[i] = (sum[i - 1] + f) % MOD; } return (int) ((sum[n] - sum[Math.max(n - forget,0)] + MOD) % MOD); } }
题目链接: