deno.land / x / masx200_leetcode_test@10.6.5 / design-twitter / index.ts

نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
export default class Twitter { #time = 0; #follower_to_followees: Map<number, Set<number>> = new Map();
#user_to_tweets: Map<number, Set<number>> = new Map(); #tweet_to_time = new Map<number, number>(); constructor() {} #deleteTweet(userId: number, tweetId: number): void { const tweets = this.#user_to_tweets.get(userId); if (tweets) { tweets.delete(tweetId); }
this.#tweet_to_time.delete(tweetId); } postTweet(userId: number, tweetId: number): void { const time = this.#time; this.#tweet_to_time.set(tweetId, time); const tweets = this.#user_to_tweets.get(userId) ?? new Set(); tweets.add(tweetId); this.#user_to_tweets.set(userId, tweets); this.#time++;
if (tweets.size > 10) { const oldestTweet = tweets.values().next().value; this.#deleteTweet(userId, oldestTweet); } }
getNewsFeed(userId: number): number[] { const followees = this.#follower_to_followees.get(userId); const tweets = Array.from(this.#user_to_tweets.get(userId) ?? []); if (followees) { for (const followee of followees) { const userTweets = this.#user_to_tweets.get(followee); if (userTweets) { userTweets.forEach((tweet) => tweets.push(tweet)); } } }
const sortedTweets = tweets .sort((a, b) => { const timeA = this.#tweet_to_time.get(a) ?? 0; const timeB = this.#tweet_to_time.get(b) ?? 0; return timeB - timeA; }) .slice(0, 10);
return sortedTweets; }
follow(followerId: number, followeeId: number): void { const followee = this.#follower_to_followees.get(followerId) ?? new Set();
followee.add(followeeId); this.#follower_to_followees.set(followerId, followee); }
unfollow(followerId: number, followeeId: number): void { this.#follower_to_followees.get(followerId)?.delete(followeeId); }}
masx200_leetcode_test

Version Info

Tagged at
a year ago