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:

输入:

原题传送门


文章目录

  • 501. 迷你推特
    • 描述
    • 样例 1:
    • 样例 2:
    • 样例 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<Integer, LinkedList<Tweet>> db;private final Map<Integer, Set<Integer>>      rel;public MiniTwitter() {// do intialization if necessarydb = 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 hereTweet tweet = Tweet.create(user_id, tweet_text);LinkedList<Tweet> 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<Tweet> getNewsFeed(int user_id) {// write your code hereList<Tweet> temp = new ArrayList<>();LinkedList<Tweet> l = db.get(user_id);if (l != null) {temp.addAll(l);}Set<Integer> s = rel.get(user_id);if (s != null) {for (Integer id : rel.get(user_id)) {LinkedList<Tweet> rl = db.get(id);if (rl != null) {temp.addAll(rl);}}}Collections.sort(temp, new Comparator<Tweet>() {@Overridepublic int compare(Tweet o1, Tweet o2) {return o2.id - o1.id;}});List<Tweet> 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<Tweet> getTimeline(int user_id) {// write your code hereLinkedList<Tweet> 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 hereSet<Integer> 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 hereSet<Integer> s = rel.get(from_user_id);s.remove(to_user_id);}
}

最后说两句

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

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

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

声明

本文由二当家的白帽子博客原创,转载请注明来源,谢谢~

LintCode领扣算法问题答案:501. 迷你推特相关推荐

  1. 【精】LintCode领扣算法问题答案:入门

    文章目录 23. 判断数字与字母字符 描述 题解 25. 打印X 描述 题解 37. 反转一个3位整数 描述 题解 145. 大小写转换 描述 题解 366. 斐波纳契数列 描述 题解 454. 矩阵 ...

  2. LintCode领扣算法问题答案:149. 买卖股票的最佳时机

    149. 买卖股票的最佳时机 描述 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 样例 1: 输入: ...

  3. LintCode领扣算法问题答案:150. 买卖股票的最佳时机 II

    150. 买卖股票的最佳时机 II 描述 给定一个数组 prices 表示一支股票每天的价格. 你可以完成任意次数的交易, 不过你不能同时参与多个交易 (也就是说, 如果你已经持有这支股票, 在再次购 ...

  4. 【精】LintCode领扣算法问题答案:1029. 寻找最便宜的航行旅途(最多经过k个中转站)

    1029. 寻找最便宜的航行旅途(最多经过k个中转站) 描述 有n个城市被一些航班所连接.每个航班 (u,v,w) 从城市u出发,到达城市v,价格为w. 给定城市数目 n,所有的航班flights.你 ...

  5. LintCode领扣算法问题答案:374. 螺旋矩阵

    374. 螺旋矩阵 描述 给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素. 样例 1: 输入:[[ 1, 2, 3 ], [ 4, 5, 6 ], ...

  6. 【精】LintCode领扣算法问题答案:1084. “马”在棋盘上的概率

    1084. "马"在棋盘上的概率 描述 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始.即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1) ...

  7. 【精】LintCode领扣算法问题答案:306. 商品列表

    306. 商品列表: 有一个商品列表,该列表是由L1.L2两个子列表拼接而成.当用户浏览并翻页时,需要从列表L1.L2中获取商品进行展示.展示规则如下: 用户可以进行多次翻页,用offset表示用户已 ...

  8. 【精】LintCode领扣算法问题答案:1086. 重复字符串匹配

    1086. 重复字符串匹配: 给定两个字符串A和B,找到A必须重复的最小次数,以使得B是它的子字符串. 如果没有这样的解决方案,返回-1. A和B的长度在1到10000之间. 样例 1 输入 : A ...

  9. 【精】LintCode领扣算法问题答案:316. 组合集

    316. 组合集 描述 给一个数组,给出所有可能的排列组合出的数小于给定的数字 1 <= len(num) <= 10 0 <= num[i] <= 9 target < ...

最新文章

  1. mysql 替换某个字段中的某个字符
  2. java 反射加实例化内部类
  3. POSIX 线程编程(二)线程建立与终止
  4. 胡浩:人人能学的AI《从零开始机器学习》苏州.NET俱乐部课程分享
  5. python时间序列画图plot总结
  6. html表格制作应该注意什么软件,html表格制作
  7. 2016级算法第一次练习赛-D.AlvinZH的儿时回忆——跳房子
  8. CIF/4CIF/QCIF/D1 分辨率
  9. leapftp 3.0.1使用教程,leapftp 3.0.1使用教程图解
  10. 154. 正则表达式匹配
  11. Opengl的坑——A卡N卡实现
  12. python 拆分excel单元格内容_Excel拆分单元格与把一个单元格内容拆分到多个单元格...
  13. C语言if语句教学计划,c语言教学计划.doc
  14. 用Poi 转word docx 跟 doc 格式
  15. 4. 串的【朴素模式匹配算法】、【KPM算法:求next数组、nextval数组】
  16. REST API简介
  17. matlab 色温图,技术:图文教你了解色温及如何选择色温
  18. IT服务模式变迁影射新旧商业时代交替
  19. 从 Bridge 到 OVS,深度探索虚拟交换机
  20. 绕过Windows正版验证新方法

热门文章

  1. Cinder-volume源码解析
  2. 文件夹右键排列图标里没修改时间
  3. 弗罗贝尼乌斯范数(Frobenius norm)
  4. 代码检查之pylint
  5. 四元数笔记(1)—— 四元数及其运算
  6. Linux篇9进程2
  7. 数字逻辑 Chapter 5——同步时序逻辑电路
  8. el-date-picker使用中遇到无法点击叉号清除,且不清除状态下无法重新选择时间的问题
  9. 集群监视软件Ganglia
  10. 教你做IOS推送 包会!