zoukankan      html  css  js  c++  java
  • [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);
        }
  • 相关阅读:
    洛谷P1219 八皇后 我。。。。。。
    c++ STL map
    洛谷P1765 手机_NOI导刊2010普及(10) 关于cin和getline的一些区别 以及一些STL
    Restore the Permutation by Sorted Segments CodeForces
    Alternating Subsequence CodeForces
    cerr与cout
    (转)女生应该找一个玩ACM的男生
    (转)搞ACM的你伤不起
    c++多组数据输入
    不要62 HDU
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8366594.html
Copyright © 2011-2022 走看看