LintCode领扣算法问题答案:501. 迷你推特
发布日期:2021-06-30 17:13:33 浏览次数:2 分类:技术文章

本文共 3443 字,大约阅读时间需要 11 分钟。

501. 迷你推特

描述

实现一个迷你的推特,支持下列几种方法

  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]  []

样例 3:

输入:


文章目录


题解

/** * Definition of Tweet: * public class Tweet { *     public int id; *     public int user_id; *     public String text; *     public static Tweet create(int user_id, String tweet_text) { *         // This will create a new tweet object, *         // and auto fill id *     } * } */public class MiniTwitter {
private final Map
> db; private final Map
> rel; public MiniTwitter() {
// do intialization if necessary db = new HashMap<>(); rel = new HashMap<>(); } /* * @param user_id: An integer * @param tweet_text: a string * @return: a tweet */ public Tweet postTweet(int user_id, String tweet_text) {
// write your code here Tweet tweet = Tweet.create(user_id, tweet_text); LinkedList
l = db.get(user_id); if (l == null) {
l = new LinkedList<>(); db.put(user_id, l); } l.addFirst(tweet); if (l.size() > 10) {
l.removeLast(); } return tweet; } /* * @param user_id: An integer * @return: a list of 10 new feeds recently and sort by timeline */ public List
getNewsFeed(int user_id) {
// write your code here List
temp = new ArrayList<>(); LinkedList
l = db.get(user_id); if (l != null) { temp.addAll(l); } Set
s = rel.get(user_id); if (s != null) { for (Integer id : rel.get(user_id)) { LinkedList
rl = db.get(id); if (rl != null) { temp.addAll(rl); } } } Collections.sort(temp, new Comparator
() { @Override public int compare(Tweet o1, Tweet o2) { return o2.id - o1.id; } }); List
ans = new ArrayList<>(); for (int i = 0; i < Math.min(10, temp.size()); ++i) { ans.add(temp.get(i)); } return ans; } /* * @param user_id: An integer * @return: a list of 10 new posts recently and sort by timeline */ public List
getTimeline(int user_id) { // write your code here LinkedList
l = db.get(user_id); if (l == null) { l = new LinkedList<>(); db.put(user_id, l); } return l; } /* * @param from_user_id: An integer * @param to_user_id: An integer * @return: nothing */ public void follow(int from_user_id, int to_user_id) { // write your code here Set
s = rel.get(from_user_id); if (s == null) { s = new HashSet<>(); rel.put(from_user_id, s); } s.add(to_user_id); } /* * @param from_user_id: An integer * @param to_user_id: An integer * @return: nothing */ public void unfollow(int from_user_id, int to_user_id) { // write your code here Set
s = rel.get(from_user_id); s.remove(to_user_id); }}

最后说两句

非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~

作者水平有限,如果文章内容有不准确的地方,请指正。

希望小伙伴们都能每天进步一点点。

声明

本文由博客原创,转载请注明来源,谢谢~

转载地址:https://le-yi.blog.csdn.net/article/details/114539760 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LintCode领扣算法问题答案:1364. 最短路径
下一篇:LintCode领扣算法问题答案:374. 螺旋矩阵

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月08日 05时47分24秒