实现一个迷你的推特,支持下列几种方法
1、postTweet(user_id, tweet_text). 发布一条推特.
2、getTimeline(user_id). 获得给定用户最新发布的十条推特,按照发布时间从最近的到之前排序
3、getNewsFeed(user_id). 获得给定用户的朋友或者他自己发布的最新十条推特,从发布时间最近到之前排序
4、follow(from_user_id, to_user_id). from_user_id 关注 to_user_id.
5、unfollow(from_user_id, to_user_id). from_user_id 取消关注 to_user_id.
样例
样例 1:
输入:
postTweet(1, "LintCode is Good!!!")
getNewsFeed(1)
getTimeline(1)
follow(2, 1)
getNewsFeed(2)
unfollow(2, 1)
getNewsFeed(2)
输出:
1
[1]
[1]
[1]
[]
样例 2:
输入:
postTweet(1, "LintCode is Good!!!")
getNewsFeed(1)
getTimeline(1)
follow(2, 1)
postTweet(1, "LintCode is best!!!")
getNewsFeed(2)
unfollow(2, 1)
getNewsFeed(2)
输出:
1
[1]
[1]
2
[2,1]
[]
* class Tweet {
* public:
* int id;
* int user_id;
* String text;
* static Tweet create(int user_id, string tweet_text) {
* // This will create a new tweet object,
* // and auto fill id
* }
* }
*/
class MiniTwitter {
public:
MiniTwitter() {
// do intialization if necessary
}
/*
* @param user_id: An integer
* @param tweet_text: a string
* @return: a tweet
*/
Tweet postTweet(int user_id, string &tweet_text) {
// write your code here
Tweet res;
res=res.create(user_id,tweet_text);
Tweets.push_back(res);
follows[user_id].insert(user_id);
return res;
}
/*
* @param user_id: An integer
* @return: a list of 10 new feeds recently and sort by timeline
*/
vector<Tweet> getNewsFeed(int user_id) {
// write your code here
vector<Tweet> res;
for (int i = Tweets.size()-1,count=0; i >=0&&count<10 ; i--) {
/* code */
if(follows[user_id].find(Tweets[i].user_id)!=follows[user_id].end())
{
res.push_back(Tweets[i]);
count++;
}
}
return res;
}
/*
* @param user_id: An integer
* @return: a list of 10 new posts recently and sort by timeline
*/
vector<Tweet> getTimeline(int user_id) {
// write your code here
vector<Tweet> res;
for (int i = Tweets.size()-1,count=0; i >=0&&count<10 ; i--) {
/* code */
if(user_id==Tweets[i].user_id)
{
res.push_back(Tweets[i]);
count++;
}
}
return res;
}
/*
* @param from_user_id: An integer
* @param to_user_id: An integer
* @return: nothing
*/
void follow(int from_user_id, int to_user_id) {
// write your code here
follows[from_user_id].insert(to_user_id);
}
/*
* @param from_user_id: An integer
* @param to_user_id: An integer
* @return: nothing
*/
void unfollow(int from_user_id, int to_user_id) {
// write your code here
follows[from_user_id].erase(to_user_id);
}
private:
map<int,set<int>>follows;
vector<Tweet> Tweets;
};