栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

知道秘密的人数[对刷算法的理解]

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

知道秘密的人数[对刷算法的理解]

知道秘密的人数
  • 前言
  • 一、知道秘密的人数
  • 二、问题分析+时间流逝问题
  • 总结
  • 参考文献

前言

刷算法题(中等题以上)有两种境界,第一种就是秒算法题,这需要大量的知识积累,以及快速抓住核心问题并理解的能力;第二种是基本能力,就是需要做到见招拆招,大多数招是隐式的,所以需要通过认真分析才能看到背后的招式,利用自己积累的知识灵活解题。

一、知道秘密的人数

二、问题分析+时间流逝问题
package competition.single300;

import java.util.LinkedList;
import java.util.List;

public class PeopleAwareOfSecret {
    
    // 采用一次索引形式,减轻取余数的复杂书写。
    final static int mod = (int) 1e9 + 7;

    public int peopleAwareOfSecret(int n, int delay, int forget) {
        List que = new LinkedList<>();
        // 第1天,该组只有一个人知到秘密,且它将来可以传播秘密。
        // que的size维持在forget大小,毕竟过了就忘了,在这期间,大于等于delay后的才能传播秘密。
        que.add(new int[]{1, 1 + delay, 1 + forget});// 第1天为第1天时知道秘密。
        int ans = 1;
        for (int i = 2; i <= n; i++) {
            // 将忘记秘密的一组人移除队列。
            while (!que.isEmpty() && que.get(0)[2] <= i) {
                // 知道秘密的人流失。
                ans -= que.get(0)[0];
                ans = (ans + mod) % mod;
                // 他已经不能传播秘密了。
                que.remove(0);
            }
            // 取今天能传播多少人,并将其加到ans中。
            int spreed = 0;
            for (int j = 0; j < que.size(); j++) {
                if (i >= que.get(j)[1]) {
                    spreed += que.get(j)[0];
                    spreed %= mod;
                }
            }
            // 得到传播总人数,不断累计。
            ans = (ans + spreed) % mod;
            // 并将其加入队列。
            que.add(new int[]{spreed, i + delay, i + forget});
        }
        return ans;//5 2 3
    }

    public static void main(String[] args) {
        new PeopleAwareOfSecret().peopleAwareOfSecret(4, 1, 3);
    }
}

总结

1)分析问题 -> 找到核心问题 -> 联系已有知识灵活应用。
2)平时负重前行,周赛才有可能灵活分析与应用知识点,取其上着得其中,多实践找找差距。
3)题目说取余,我一贯以为是最后结果很大,int存不下,所以需要最后取余,结果一直通不过。题意是中间每个结果都需要取余,否则会溢出。所以平时题感/经验刷少了。

参考文献

[1] LeetCode 第300单周赛 知道秘密的人数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002635.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号