• [leetcode]355. Design Twitter设计实现一个微博系统


    //先定义一个数据结构,代表一条微博,有两个内容:发布者id,微博id(代表微博内容)
        class TwitterData
        {
            int userId;
            int twitterId;
            public TwitterData(int userId,int twitterId)
            {
                this.twitterId = twitterId;
                this.userId = userId;
            }
        }
        //用一个map存储用户和各用户的关注用户
        Map<Integer,Set<Integer>> userManager ;
        //用一个linkedList来存储所有微博
        List<TwitterData> twitterDatas ;
        /** Initialize your data structure here. */
        public Twitter() {
            userManager = new HashMap<>();
            twitterDatas= new LinkedList<>();
        }
    
        /** Compose a new tweet. */
        public void postTweet(int userId, int tweetId) {
            //用户名如果没有注册,那就自动注册
            if (!userManager.containsKey(userId))
            {
                Set<Integer> follows = new HashSet<>();
                //这里注意,要想看到自己的微博,也要关注自己
                follows.add(userId);
                userManager.put(userId,follows);
            }
            TwitterData t = new TwitterData(userId,tweetId);
            //添加到微博列表,每次都是添加到头部,代表是新的
            twitterDatas.add(0,t);
        }
    
        /** 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. */
        //这里的意思是显示userId关注的人的前10条微博,而不是userId的微博
        public List<Integer> getNewsFeed(int userId) {
            List<Integer> res = new ArrayList<>();
            //用户如果不存在,那么就不显示
            if (userManager.containsKey(userId))
            {
                Set<Integer> follows = userManager.get(userId);
                //计数,只显示10条
                int count = 0;
                for (TwitterData t:
                     twitterDatas) {
                    if (count==10) break;
                    //只添加关注用户的微博
                    if (follows.contains(t.userId))
                    {
                        res.add(t.twitterId);
                        count++;
                    }
                }
            }
            return res;
        }
    
        /** Follower follows a followee. If the operation is invalid, it should be a no-op. */
        public void follow(int followerId, int followeeId) {
            //er是主动方,ee是被动方
            //考虑两个用户不存在的情况
            Set<Integer> follows;
            if (!userManager.containsKey(followerId))
            {
                follows = new HashSet<>();
                follows.add(followerId);
                userManager.put(followerId,follows);
            }
            if (!userManager.containsKey(followeeId))
            {
                follows = new HashSet<>();
                follows.add(followeeId);
                userManager.put(followeeId,follows);
            }
            //两者都存在后
            follows = userManager.get(followerId);
            follows.add(followeeId);
        }
    
        /** Follower unfollows a followee. If the operation is invalid, it should be a no-op. */
        public void unfollow(int followerId, int followeeId) {
            //排除各种情况后删除就行
            if (followerId!=followeeId&&userManager.containsKey(followerId)&&userManager.containsKey(followeeId))
                userManager.get(followerId).remove(followeeId);
        }
  • 相关阅读:
    2017.9.29 ubuntu安装mysql服务
    如何在树莓派上安装mjpeg-streamer(针对摄像头为UVC的)
    2016.9.22感想及收获
    GL-iNET路由器如何安装DDNS服务
    2016.7.5 记项目过程中犯的一个从未察觉的低级错误
    C++课程笔记 Lesson 01
    关于Jlink在linux系统下连接错误的解决方法
    如何通过命令提示符进入MySQL服务器
    java面试题
    hive面试题
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8366594.html
Copyright © 2020-2023  润新知