【力扣日記】355 設計推特

題目描述

設計一個簡化版的推特(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的獲取推文應當返回一個列表,其中包含一個id5的推文.
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的獲取推文應當返回一個列表,其中包含一個id5的推文.
// 因爲用戶1已經不再關注用戶2.
twitter.getNewsFeed(1);

算法思路

根據示例,第一思路是給每個用戶一個推文空間,然後把博主和關注者的推文都放到博主推文空間,然後保證推文空間大小爲10條,然後更新維護推文空間和博主的關注列表即可,但是取關後要修改推文空間……

雖然現在看來貌似也行,但是我還是改變了思路……

class Twitter:
    def __init__(self):
        self.d_follow = {}
        self.d_food = []
        self.limit = 10
    def postTweet(self, userId: int, tweetId: int) -> None:
        if userId not in self.d_follow:
            self.d_follow[userId] = {userId}
        self.d_food.insert(0, (userId, tweetId))
    def getNewsFeed(self, userId: int):
        if userId not in self.d_follow:
            self.d_follow[userId] = {userId}
        res = []
        ID = self.d_follow[userId]
        i = 0
        while len(res) < 10 and i < len(self.d_food):
            f = self.d_food[i]
            if f[0] in ID:
                res.append(f[1])
            i += 1
        return res
    def follow(self, followerId: int, followeeId: int) -> None:
        
        if followerId in self.d_follow:
            self.d_follow[followerId].add(followeeId)
        else:
            self.d_follow[followerId] = {followeeId, followerId}
    def unfollow(self, followerId: int, followeeId: int) -> None:
        try:
            if followerId==followeeId:return
            self.d_follow[followerId].discard(followeeId)
        except:
            pass

執行用時 :496 ms, 在所有 Python3 提交中擊敗了6.40%的用戶
內存消耗 :19.1 MB, 在所有 Python3 提交中擊敗了100.00%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章