LeetCode题解(0355):设计推特(Python)

题目:原题链接(中等)

标签:设计、哈希表、排序

解法时间复杂度空间复杂度执行用时
Ans 1 (Python)92ms (98.35%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

class Twitter:

    def __init__(self):
        self._now = 0  # 当前时间
        self._tweet = collections.defaultdict(collections.deque)  # 用户推文
        self._follow = collections.defaultdict(set)  # 用户关注

    def postTweet(self, userId: int, tweetId: int) -> None:
        # 一旦发布推文,则默认自己关注自己
        if not self._tweet[userId]:
            self._follow[userId].add(userId)

        # 发布推文并推动时间更新
        self._tweet[userId].append((tweetId, self._now))
        self._now += 1

        # 控制推文存储总数,移除过早的推文
        if len(self._tweet[userId]) > 10:
            self._tweet[userId].popleft()

    def getNewsFeed(self, userId: int) -> List[int]:
        tweets = []
        for followee in self._follow[userId]:
            tweets.extend(self._tweet[followee])
        tweets.sort(key=lambda x: x[1], reverse=True)
        return [tweet[0] for tweet in tweets[:10]]

    def follow(self, followerId: int, followeeId: int) -> None:
        self._follow[followerId].add(followeeId)

    def unfollow(self, followerId: int, followeeId: int) -> None:
        if followerId != followeeId:  # 自己不能取关自己
            if followeeId in self._follow[followerId]:
                self._follow[followerId].remove(followeeId)
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页

打赏

长行

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者