355. 设计推特

Java实现 LeetCode 355 设计推特 355. 设计推特 设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能: postTweet(userId, tweetId): 创建一条新的推文 getNewsFeed(userId): 检索最近的十条推文。每个推文都必须是由此用户关注的人或者是用户自己发出的。推文必须按照时间顺序由最近... 阅读详情
/**
* 355. 设计推特
*/
class Twitter {
    /**
    * 保存twitter记录
    */
    private Map<Integer, List<TweetRecord>> tweetMap;
    /**
    * 保存关注关系
    */
    private Map<Integer, Set<Integer>> followMap;
    
    private Long rTime = 0L;
    /** Initialize your data structure here. */
    public Twitter() {
        tweetMap = new HashMap();
        followMap = new HashMap();
    }
    
    /** Compose a new tweet. */
    public void postTweet(int userId, int tweetId) {
        List<TweetRecord> tweetList = tweetMap.get(userId);
        if(tweetList == null){
            tweetList = new ArrayList();
            tweetList.add(new TweetRecord(tweetId, rTime++));
            tweetMap.put(userId, tweetList);
        }else{
            tweetList.add(new TweetRecord(tweetId, rTime++));
        }
    }
    
    /** Retrieve the 10 most recent tweet ids in the user's news feed. Each item in the news feed must be posted by users who the user followed or by the user herself. Tweets must be ordered from most recent to least recent. */
    public List<Integer> getNewsFeed(int userId) {
        List<Integer> result = new ArrayList();
        List<TweetRecord> tmpList = new ArrayList();
        if(tweetMap.get(userId) != null){
            tmpList.addAll(tweetMap.get(userId));
        }
        Set<Integer> followIds = followMap.get(userId);
        if(followIds != null) {
        	for(Integer followId: followIds){
                if(followId == userId){
                    continue;
                }
                List<TweetRecord> tweetList = tweetMap.get(followId);
                if(tweetList != null){
                    tmpList.addAll(tweetList);
                }
            }
        }
        Collections.sort(tmpList, new Comparator<TweetRecord>(){
            public int compare(TweetRecord o1, TweetRecord o2){
                return o2.getPubTime().compareTo(o1.getPubTime());
            }
        });
        int count = 0;
        for(TweetRecord tr: tmpList){
            if(count == 10){
                break;
            }
            result.add(tr.getTweetId());
            count++;
        }
        return result;
    }
    
    /** Follower follows a followee. If the operation is invalid, it should be a no-op. */
    public void follow(int followerId, int followeeId) {
        Set<Integer> followList = followMap.get(followerId);
        if(followList == null){
            followList = new HashSet();
            followList.add(followeeId);
            followMap.put(followerId, followList);
        }else{
            followList.add(followeeId);
        }
    }
    
    /** Follower unfollows a followee. If the operation is invalid, it should be a no-op. */
    public void unfollow(int followerId, int followeeId) {
        Set<Integer> followList = followMap.get(followerId);
        if(followList == null){
            return;
        }
        boolean flag = followList.contains(followeeId);
        if(flag){
            followList.remove(followeeId);
        }
    }

    class TweetRecord{
        private Integer tweetId;
        private Long pubTime;

        TweetRecord(Integer id, long time){
            tweetId = id;
            pubTime = time;
        }

        public Long getPubTime(){
            return pubTime;
        }
        public Integer getTweetId(){
            return tweetId;
        }
    }
}

/**
 * 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);
 */
高阶玩法——Dify生成的数据自动写入mysql数据库 采用自定义工具方式,利用 python编写一个服务sql_save_post,将接收到的内容写入指定数据库的表中,并为该服务撰写一个 OpenAPI 的 schema。配置工作流:我们以写入天气预报为例,在生成天气预报内容后,连接自定义工具“sql_save_post”,将所需的字段配置完成后,实现将生成的内容自动写入mysql数据库中。编写OpenAPI的schema:在dify平台的工具栏目,创建自定义工具,输入工具名称“sql_save_post”。工具:sql_save_post; 阅读详情

相关推荐

单目视觉定位:深入解析PNP算法在机器人导航中的实战应用

本文深入解析了PNP算法在机器人单目视觉定位中的核心原理与实战应用。通过拆解坐标变换四步,详细阐述了如何从二维图像点反求相机三维位姿。文章结合OpenCV的solvePnP函数,提供了算法选择、参数调优及结果后处理的实用指南,并针对机器人导航中的特征匹配、尺度不确定性等挑战,给出了鲁棒性优化与实时性平衡的解决方案。

weixin_29083649的博客 419

LeetCode第355题_设计推特

LeetCode 355题:设计推特 - 摘要 这是一道中等难度的系统设计题目,要求实现一个简化版的推特功能。核心功能包括发送推文、获取最近10条推文、关注/取消关注其他用户。 关键点: 使用哈希表存储用户关注列表和推文列表 采用优先队列(堆)高效获取最近推文 时间戳记录推文发送顺序 实现复杂度: 发推文:O(1) 获取推文:O(n log k) 关注/取消关注:O(1) 提供C#、Python、C++三种实现方案,适合想要提升系统设计能力和数据结构应用的程序员练习。

qq_40263592的博客 1078

【史诗级】详细阐述借助AI实现对Windows蓝屏原因进行精确定位的方法

在解决问题的过程中我决定把这一切都记录下来,并整理出一套通用的方法,方便快速精确定位引起蓝屏的真实原因。今天我的蓝屏代码是0x000000ef,而你或许是遇到另一个蓝屏代码,代码本身代表的含义不是这里的讨论重点,重要的是解决问题的底层逻辑。

sprlightning的博客 1万+

leetcode355设计推特

/ 用户 1 的获取推文应当返回一个列表,其中包含两个推文,id 分别为 -> [6, 5]。// 用户 1 获取推文应当返回一个列表,其中包含一个 id 为 5 的推文。// 用户 1 发送了一条新推文 (用户 id = 1, 推文 id = 5)// 用户 1 的获取推文应当返回一个列表,其中包含一个 id 为 5 的推文。设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近。// 用户 1 关注了用户 2。

furende31的博客 344

使用SpringBoot+Vue3开发项目(1)---- 设计用户注册和登录的接口及页面

本文基于黑马大事件项目介绍如何使用SpringBoot+Vue3来实现前后端联调的登录与注册操作。

记得开心一点嘛的博客 3644

从‘最速控制’到代码:深入拆解韩京清ADRC中TD跟踪器的fhan函数(含Matlab/Simulink实例)

本文深入解析韩京清ADRC中的fhan函数,从理论到代码实现,详细拆解其在Matlab/Simulink中的应用。通过分析最速控制问题和非线性TD的连续形式,揭示fhan函数在信号处理和噪声抑制中的独特优势,并提供工程实践中的参数整定和优化技巧。

weixin_42659194的博客 248

力扣355.设计推特

设计Node类有哈希集合存关注人的Id,有链表存推文的顺序。

Pisasama的博客 322

VC中基于TWAIN协议控制扫描仪-----初级版

PS:本人是C++小白一枚,在研究此功能时不知走了多少弯路

a1101000099的专栏 8789

LeetCode第355题 - 设计推特

LeetCode第355题 - 设计推特

流水账 436

【C语言】字符常量详解

字符常量是C语言中处理字符数据的重要工具。通过单引号括起一个字符,我们可以方便地使用字符常量进行字符判断、字符运算和字符串处理等操作。理解字符常量的表示方法、使用场景和ASCII码对应关系,对于编写高效的C语言程序至关重要。

LuckiBit 5021

LLaMA-Factory微调教程5:多模态VLM模型对话

视觉-语言模型(VLM)概述与应用 视觉-语言模型(VLM)是一类结合视觉和语言信息的人工智能模型,旨在实现跨模态的理解与交互。其核心目标包括跨模态理解和生成能力,关键技术涉及模态表示与映射、多模态预训练以及跨模态交互机制。 典型VLM模型包括: CLIP:通过对比学习实现图像和文本的向量空间对齐 BLIP:结合自监督和弱监督学习提升语义对齐 ALBEF:基于BERT结构扩展跨模态注意力 DALL-E系列:基于文本生成图像的生成式模型 CLIP4Clip:扩展CLIP到视频领域 VLM在图像/视频检索、视觉

Cachel Wood的博客 1115

【中等】力扣算法题解析LeetCode355:设计推特

LeetCode 355: 设计推特系统。设计简化版推特,支持用户发推、关注/取消关注及获取最新10条动态(含自己和关注者的推文)。 核心功能 postTweet(userId, tweetId) - O(1)时间发布推文 getNewsFeed(userId) - O(nlogk)时间获取动态(最大堆优化) follow/unfollow - O(1)时间处理关注关系 实现方案 数据结构 推文链表:用户推文按时间倒序存储 哈希表:维护用户关注集合 关键优化 最大堆合并多路推文流 禁止自关注避免重复

ylumwd的博客 1014

微信小程序 “net::ERR_CONNECTION_REFUSED” 报错大揭秘与破解之道

在微信小程序开发与运行过程中,“net::ERR_CONNECTION_REFUSED” 报错是开发者常遇难题。该错误意味着小程序与服务器连接建立失败,会导致功能无法使用、数据加载异常等问题,严重影响用户体验和业务运转。本文系统剖析此错误,从网络环境不佳、服务器异常、小程序配置有误等常见触发场景入手,提供网络、服务器、配置、代码等多维度排查步骤,给出针对性解决策略,如修复网络、处理服务器故障、修正配置与代码错误,还提出开发与运维阶段的预防措施,助力开发者高效解决该报错问题。

邓邓子的博客 6144

[355] 设计推特

/* * @lc app=leetcode.cn id=355 lang=cpp * * [355] 设计推特 */ // @lc code=start #include <vector> #include <unordered_set> #include <unordered_map> #include <list> using namespace std; class Twitter { struct Node{ //

weixin_44827212的博客 259

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

355设计推特

一、前言 分类:Hash Table。 问题来源LeetCode 355 难度:中等。 问题链接:https://leetcode-cn.com/problems/design-twitter/ 二、题目 设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能: postTweet(userId, tweetId): 创建一条新的推文 getNewsFeed(userId): 检索最.

行走 251

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

编程大师-技术-算法-leetcode-355. 设计推特

时间戳标记推文新旧 + Map管理用户推文/关注关系 + 排序聚合最近10条推文;关键约束:过滤“关注自己”的无效操作,保证关注关系无重复;排序逻辑:严格按时间戳降序,取前10条,符合“最近到最远”的要求。

qq_39370495的博客 615

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LeetCode 355 - 设计推特

题目描述 355. 设计推特 解法:哈希表+单链表+堆(C++) 其实设计类问题都不难解,主要是想明白采用什么样的数据结构 int global_Time = 0; // 发表推文的时间 // 推文类 class Tweet{ public: int id; int time; Tweet* next; Tweet(int id){ this-&g...

Aries_young的博客 377

leetcode 355. 设计推特

355. 设计推特 设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能: postTweet(userId, tweetId): 创建一条新的推文 getNewsFeed(userId): 检索最近的十条推文。每个推文都必须是由此用户关注的人或者是用户自己发出的。推文必须按照时间顺序由最近的开始排序。 follow(followerId, followeeId): 关注一个用户 unfollow(f

Qin_酱的博客 330

355. 设计推特(系统设计)

这里「推特」,可以理解为中国的「微博」、「朋友圈」、「力扣」,真正的数据数需要存在数据库里的,并且还要加上一些非关系型的数据库(redis 等),不能是放在内存里的,这里只是简化了需求。 分析: 这是一类系统设计问题(上周我们做过的 LFU 缓存也是属于这一类问题),通常简化了很多需求,只要题目意思理解清楚,一般情况下不难写出,难在编码的细节和调试; 这里需求 3 和需求 4,只需...

INGNIGHT的专栏 338
上一篇: 74. 搜索二维矩阵
下一篇: 344. 反转字符串(双指针)
Lazy mode
博客等级 码龄10年 13粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值