Skip to content

Commit 69ca2e7

Browse files
committed
feat: add solution for design twitter in python
1 parent df56b15 commit 69ca2e7

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

alternative/medium/design_twitter.py

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
from typing import List
2+
import heapq
3+
4+
class Twitter:
5+
6+
def __init__(self):
7+
"""
8+
Initialize your data structure here.
9+
"""
10+
self.tweets = {}
11+
self.follows = {}
12+
self.time = 0
13+
14+
def postTweet(self, userId: int, tweetId: int) -> None:
15+
if self.tweets.get(userId) is None:
16+
self.tweets[userId] = []
17+
18+
self.tweets[userId].append([self.time, tweetId])
19+
self.time -= 1
20+
21+
22+
def getNewsFeed(self, userId: int) -> List[int]:
23+
minHeap = []
24+
res = []
25+
26+
if self.follows.get(userId) is None:
27+
self.follows[userId] = set()
28+
29+
self.follows[userId].add(userId)
30+
31+
for followeeId in self.follows[userId]:
32+
if followeeId in self.tweets:
33+
index = len(self.tweets[followeeId]) - 1
34+
count, tweetId = self.tweets[followeeId][index]
35+
minHeap.append([count, tweetId, followeeId, index - 1])
36+
37+
heapq.heapify(minHeap)
38+
39+
while len(res) < 10 and minHeap:
40+
count, tweetId, followeeId, index = heapq.heappop(minHeap)
41+
res.append(tweetId)
42+
if index >= 0:
43+
count, tweetId, self.tweets[followeeId][index]
44+
heapq.heappush(minHeap, [count, tweetId, followeeId, index - 1])
45+
46+
return res
47+
48+
49+
def follow(self, followerId: int, followeeId: int) -> None:
50+
if self.follows.get(followerId) is None:
51+
self.follows[followerId] = set()
52+
53+
self.follows[followerId].add(followeeId)
54+
55+
56+
def unfollow(self, followerId: int, followeeId: int) -> None:
57+
if followeeId in self.follows[followerId]:
58+
self.follows[followerId].remove(followeeId)
59+
60+
61+
62+
# Your Twitter object will be instantiated and called as such:
63+
# obj = Twitter()
64+
# obj.postTweet(userId,tweetId)
65+
# param_2 = obj.getNewsFeed(userId)
66+
# obj.follow(followerId,followeeId)
67+
# obj.unfollow(followerId,followeeId)
68+
69+
twitter = Twitter()
70+
twitter.postTweet(1, 5)
71+
assert twitter.getNewsFeed(1) == [5]

0 commit comments

Comments
 (0)