这篇文章是程序自动发表的,详情可以见
这里
href="http://ounix1xcw.bkt.clouddn.com/github.markdown.css" rel="stylesheet">
href="http://ounix1xcw.bkt.clouddn.com/github.markdown.css" rel="stylesheet">
这是leetcode的第355题--Design Twitter
题目 Design a simplified version of Twitter where users can post tweets, follow/unfollow another user and is able to see the 10 most recent tweets in the user's news feed. Your design should support the following methods:
- postTweet(userId, tweetId): Compose a new tweet.
- follow(followerId, followeeId): Follower follows a followee.
- unfollow(followerId, followeeId): Follower unfollows a followee.
- getNewsFeed(userId): 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. 思路 我另外定义了一个user类,以及用得我前面写的优先队列,写了很长,一点都不简洁。看了别人的代码(如下),真的很佩服。踩知道python有
heapq
模块,功能很强大,比如,heapify , merge等等
show me the code
class Twitter(object): def __init__(self): self.timer = itertools.count(step=-1) self.tweets = collections.defaultdict(collections.deque) self.followees = collections.defaultdict(set) def postTweet(self, userId, tweetId): self.tweets[userId].appendleft((next(self.timer), tweetId)) def getNewsFeed(self, userId): tweets = heapq.merge(*(self.tweets[u] for u in self.followees[userId] | {userId})) return [t for _, t in itertools.islice(tweets, 10)] def follow(self, followerId, followeeId): self.followees[followerId].add(followeeId) def unfollow(self, followerId, followeeId): self.followees[followerId].discard(followeeId)