Skip to content

Commit a0d6db6

Browse files
committed
https://leetcode.cn/problems/design-twitter/
1 parent 8281f58 commit a0d6db6

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -842,6 +842,8 @@ https://leetcode.cn/problems/different-ways-to-add-parentheses/
842842

843843
https://leetcode.cn/problems/1-bit-and-2-bit-characters/
844844

845+
https://leetcode.cn/problems/design-twitter/
846+
845847
#### 安装教程
846848

847849
1. 安装`deno`

design-twitter/index.ts

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

0 commit comments

Comments
 (0)