leetcode 355 设计推特

这篇具有很好参考价值的文章主要介绍了leetcode 355 设计推特。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用链表存储用户发送的每一个推特,用堆获取最先的10条动态文章来源地址https://www.toymoban.com/news/detail-682121.html

class Twitter {
    Map<Integer,Set<Integer>> followMap;
    //规定最新的放到最后
    Map<Integer,Tweet> postMap;
    //优先队列(堆)
    PriorityQueue<Tweet> priorityQueue;
    int timeStamp = 0;
    int limit = 10;
    public Twitter() {
        followMap = new HashMap();
        postMap = new HashMap<>();
        //按照每一个推特发送的时间戳由大到小排布
        priorityQueue = new PriorityQueue<>((t1,t2) -> t2.timeStamp - t1.timeStamp);
    }
    //userId发送推特
    public void postTweet(int userId, int tweetId) {
        //首先根据postMap来获取userId对应发送到文章
        Tweet tweet = postMap.get(userId);
        //生成新的tweet
        Tweet newTweet = new Tweet(tweetId, timeStamp++, tweet);
        postMap.put(userId,newTweet);
    }
    //根据userId获得自己和关注用户的10条推特,按时间顺序由近到远排序
    public List<Integer> getNewsFeed(int userId) {
        //因为每一个用户都有自己的优先队列,所以先清空优先队列
        priorityQueue.clear();
        //将自己和关注的用户发送的最新的推特id先放入到优先队列
        if (postMap.containsKey(userId))
            priorityQueue.offer(postMap.get(userId));
        Set<Integer> follows = followMap.get(userId);
        if (follows != null){
            for (Integer follow : follows) {
                 if (postMap.containsKey(follow))
                priorityQueue.offer(postMap.get(follow));
            }
        }
        //现在用户和所有关注的推特都已经放入到优先队列,开始获取前10条
        int count = 0;
        ArrayList<Integer> result = new ArrayList<>();
        while (!priorityQueue.isEmpty() && count < limit){
            //获取头部,在优先队列中删除
            Tweet tweet = priorityQueue.poll();
            result.add(tweet.id);
            if (tweet.next != null)
                priorityQueue.offer(tweet.next);
            count++;
        }
        return result;
    }
    //关注
    public void follow(int followerId, int followeeId) {
        // 被关注人不能是自己
        if (followeeId == followerId) {
            return;
        }
        
        Set<Integer> follows = followMap.getOrDefault(followerId, new HashSet<>());
        follows.add(followeeId);
        followMap.put(followerId,follows);
    }
    //取关
    public void unfollow(int followerId, int followeeId) {
        // 被关注人不能是自己
        if (followeeId == followerId) {
            return;
        }
        Set<Integer> follows = followMap.getOrDefault(followerId, new HashSet<>());
        follows.remove(followeeId);
        followMap.put(followerId,follows);
    }
}
class Tweet{
    int id;
    int timeStamp;
    Tweet next;

    public Tweet(int id, int timeStamp) {
        this.id = id;
        this.timeStamp = timeStamp;
    }

    public Tweet(int id, int timeStamp, Tweet next) {
        this.id = id;
        this.timeStamp = timeStamp;
        this.next = next;
    }
}

/**
 * Your Twitter object will be instantiated and called as such:
 * Twitter obj = new Twitter();
 * obj.postTweet(userId,tweetId);
 * List<Integer> param_2 = obj.getNewsFeed(userId);
 * obj.follow(followerId,followeeId);
 * obj.unfollow(followerId,followeeId);
 */

到了这里,关于leetcode 355 设计推特的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 推特运营的方法

    推特是一个广泛使用的社交媒体平台,可以通过以下方法来运营和营销: 建立一个完整的个人或品牌资料:确保你的推特资料页面清晰、有吸引力,并包含关键信息,如个人简介、网站链接和联系方式。 确定目标受众:明确你想要吸引的目标受众,如年龄、地理位置、兴趣

    2024年02月05日
    浏览(24)
  • 面向JavaScript开发人员的Adobe AIR与Dreamweaver

    入门教程,非常详细,CS4里面应该可以省略前面几步直接开发了。   Adobe AIR 对于 HTML/JavaScript 应用程序与桌面的集成有着出色的支持,但除了所有附加功能之外,还需要一些其他工具和技术。这篇文章探讨了使用 HTML/JavaScript 的 Web 开发与使用同样工具的应用程序开发之间的

    2024年02月08日
    浏览(47)
  • 推特如何安全注册?如何防封?

    近日跨境圈发生了一个大新闻,社交媒体巨头推特正式更名与标示为“X”,这一举措引发了广泛关注和讨论。 twitter一直以来对于做跨境业务的小伙伴来说是电商运营、广告投放、客户维系的重要阵地。此次改版,也意味着之后更加支持跨境玩家的深耕。还没有开拓这个领域

    2024年02月21日
    浏览(37)
  • PHP Twitter 推特 第三方登录

    twitter登录文档 开发者平台 申请成为开发流程按引导操作就可以了, 但是要注意信息填写要真实完善的信息, 否则容易被拒绝(被拒绝可能不能二次申请, 之前不能, 现在不知道能不能) 目前推特一个号只能开通一个免费应用, 可付费开通多个 设置基础信息 User authentication setting

    2024年04月16日
    浏览(27)
  • 一文解析推特上最常见的加密骗局

    推特是加密用户最常用的社交媒体之一,在方便我们及时同步行业最新消息的同时,也成为了不少加密骗局的媒介。这篇文章将为大家解析推特上最常见的加密货币和NFT骗局,帮助大家识别和避开这些骗局。 虚假链接骗局 骗子会使用包含相似Unicode字符的虚假链接进行欺诈。

    2024年02月02日
    浏览(65)
  • 新闻每天都在更新,那网页上的新闻页面是怎么使用Dreamweaver制作的?

    新闻每天都在更新,那网页上的新闻页面是怎么使用Dreamweaver制作的? 新闻有很多种,但大多数结构都差不多,我们就先做一个简单的新闻页面,如图1中画圈圈的新闻内容。 图1 案例实现 新闻页面一般由四个部分构成,分别为标题、发布日期、水平线和网页正文。其中标题

    2024年01月22日
    浏览(30)
  • X(推特)“鸡贼”手段曝光:这些广告并没有标注,你知道吗?

    在使用推特的时候,有些人可能会注意到,一些广告并没有正确地标注,看起来很像普通的内容,十分难以区分。美国的联邦贸易委员会(FTC)和欧盟的欧洲广告标准局(EASA)等机构都对广告标签有着严格的要求,不管是故意还是无意的违规行为都会受到惩罚。不仅如此,推

    2024年02月09日
    浏览(27)
  • 【爬虫】用selenium登陆推特并爬取用户历史推文

    做rumor detection 用到了twitter15和twitter16数据集,里边只给了推文id和评论者的uid,想要爬取其他数据就只能自己动手。 我需要爬取推文评论用户在评论时间点前两个月的历史推文,然而这两个数据集都太老了,里边的数据都是13-14年的,所以用twitter API无法获取到(因为官方A

    2024年01月24日
    浏览(26)
  • 防止推特Twitter账号被冻结,应该选什么代理类型IP?

    在处理多个 Twitter 帐号时,选择合适的代理IP对于避免大规模帐户暂停至关重要。现在,问题出现了:哪种类型的代理是满足您需求的最佳选择?下面文章将为你具体讲解推特账号冻结原因以及重点介绍如何选择代理IP。 一、推特账号被冻结原因 1、IP问题 nbsp;使用不稳定或已

    2024年04月17日
    浏览(62)
  • 【 BERTopic应用 02/3】 分析卡塔尔世界杯推特数据

    摄影:Fauzan Saari on Unsplash         这是我们对世界杯推特数据分析的第3部分,我们放弃了。我们将对我们的数据进行情绪分析,以了解人们对卡塔尔世界杯的感受。我将在这里介绍的一个功能强大的工具包是Hugging Face,您可以在其中找到各种模型,任务,数据集,它还

    2024年02月13日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包