设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能:

  • postTweet(userId, tweetId): 创建一条新的推文
  • getNewsFeed(userId): 检索最近的十条推文。每个推文都必须是由此用户关注的人或者是用户自己发出的。推文必须按照时间顺序由最近的开始排序。
  • follow(followerId, followeeId): 关注一个用户
  • unfollow(followerId, followeeId): 取消关注一个用户
    示例:

    
    Twitter twitter = new Twitter();

// 用户1发送了一条新推文 (用户id = 1, 推文id = 5).
twitter.postTweet(1, 5);

// 用户1的获取推文应当返回一个列表,其中包含一个id为5的推文.
twitter.getNewsFeed(1);

// 用户1关注了用户2.
twitter.follow(1, 2);

// 用户2发送了一个新推文 (推文id = 6).
twitter.postTweet(2, 6);

// 用户1的获取推文应当返回一个列表,其中包含两个推文,id分别为 -> [6, 5].
// 推文id6应当在推文id5之前,因为它是在5之后发送的.
twitter.getNewsFeed(1);

// 用户1取消关注了用户2.
twitter.unfollow(1, 2);

// 用户1的获取推文应当返回一个列表,其中包含一个id为5的推文.
// 因为用户1已经不再关注用户2.
twitter.getNewsFeed(1);

1.哈希+列表
Python解答:
```python
class Twitter:

    def __init__(self):
        self.index = 0
        self.user = {}
        self.twitter = {}

    def postTweet(self, userId: int, tweetId: int) -> None:
        if userId not in self.user.keys():
            self.user[userId] = set([userId])
            self.twitter[userId] = [(self.index, tweetId)]
        elif userId not in self.twitter.keys():
            self.twitter[userId] = [(self.index, tweetId)]
        else:
            self.twitter[userId].append((self.index, tweetId))
        self.index += 1
    def getNewsFeed(self, userId: int) -> List[str]:
        temp = []
        if self.twitter:
            for item in self.user[userId]:
                if item in self.twitter.keys():
                    temp.extend(self.twitter[item])
            temp.sort(key=(lambda x:x[0]), reverse=True)
            return [temp[i][1] for i in range(min(10, len(temp)))]
        else:
            return []

    def follow(self, followerId: int, followeeId: int) -> None:
        if followerId not in self.user.keys():
            self.user[followerId] = set([followerId])
        self.user[followerId].add(followeeId)

    def unfollow(self, followerId: int, followeeId: int) -> None:
        if followerId not in self.user.keys():
            self.user[followerId] = set([followerId])
        elif followeeId in self.user[followerId]:
            self.user[followerId].remove(followeeId)

# Your Twitter object will be instantiated and called as such:
# obj = Twitter()
# obj.postTweet(userId,tweetId)
# param_2 = obj.getNewsFeed(userId)
# obj.follow(followerId,followeeId)
# obj.unfollow(followerId,followeeId)
最后修改日期: 2021年9月26日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。