LintCode领扣算法问题答案:501. 迷你推特
501. 迷你推特
描述
实现一个迷你的推特,支持下列几种方法
- postTweet(user_id, tweet_text). 发布一条推特.
- getTimeline(user_id). 获得给定用户最新发布的十条推特,按照发布时间从最近的到之前排序
- getNewsFeed(user_id). 获得给定用户的朋友或者他自己发布的最新十条推特,从发布时间最近到之前排序
- follow(from_user_id, to_user_id). from_user_id 关注 to_user_id.
- 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. 迷你推特相关推荐
- 【精】LintCode领扣算法问题答案:入门
文章目录 23. 判断数字与字母字符 描述 题解 25. 打印X 描述 题解 37. 反转一个3位整数 描述 题解 145. 大小写转换 描述 题解 366. 斐波纳契数列 描述 题解 454. 矩阵 ...
- LintCode领扣算法问题答案:149. 买卖股票的最佳时机
149. 买卖股票的最佳时机 描述 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 样例 1: 输入: ...
- LintCode领扣算法问题答案:150. 买卖股票的最佳时机 II
150. 买卖股票的最佳时机 II 描述 给定一个数组 prices 表示一支股票每天的价格. 你可以完成任意次数的交易, 不过你不能同时参与多个交易 (也就是说, 如果你已经持有这支股票, 在再次购 ...
- 【精】LintCode领扣算法问题答案:1029. 寻找最便宜的航行旅途(最多经过k个中转站)
1029. 寻找最便宜的航行旅途(最多经过k个中转站) 描述 有n个城市被一些航班所连接.每个航班 (u,v,w) 从城市u出发,到达城市v,价格为w. 给定城市数目 n,所有的航班flights.你 ...
- LintCode领扣算法问题答案:374. 螺旋矩阵
374. 螺旋矩阵 描述 给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素. 样例 1: 输入:[[ 1, 2, 3 ], [ 4, 5, 6 ], ...
- 【精】LintCode领扣算法问题答案:1084. “马”在棋盘上的概率
1084. "马"在棋盘上的概率 描述 已知一个 NxN 的国际象棋棋盘,棋盘的行号和列号都是从 0 开始.即最左上角的格子记为 (0, 0),最右下角的记为 (N-1, N-1) ...
- 【精】LintCode领扣算法问题答案:306. 商品列表
306. 商品列表: 有一个商品列表,该列表是由L1.L2两个子列表拼接而成.当用户浏览并翻页时,需要从列表L1.L2中获取商品进行展示.展示规则如下: 用户可以进行多次翻页,用offset表示用户已 ...
- 【精】LintCode领扣算法问题答案:1086. 重复字符串匹配
1086. 重复字符串匹配: 给定两个字符串A和B,找到A必须重复的最小次数,以使得B是它的子字符串. 如果没有这样的解决方案,返回-1. A和B的长度在1到10000之间. 样例 1 输入 : A ...
- 【精】LintCode领扣算法问题答案:316. 组合集
316. 组合集 描述 给一个数组,给出所有可能的排列组合出的数小于给定的数字 1 <= len(num) <= 10 0 <= num[i] <= 9 target < ...
最新文章
- mysql 替换某个字段中的某个字符
- java 反射加实例化内部类
- POSIX 线程编程(二)线程建立与终止
- 胡浩:人人能学的AI《从零开始机器学习》苏州.NET俱乐部课程分享
- python时间序列画图plot总结
- html表格制作应该注意什么软件,html表格制作
- 2016级算法第一次练习赛-D.AlvinZH的儿时回忆——跳房子
- CIF/4CIF/QCIF/D1 分辨率
- leapftp 3.0.1使用教程,leapftp 3.0.1使用教程图解
- 154. 正则表达式匹配
- Opengl的坑——A卡N卡实现
- python 拆分excel单元格内容_Excel拆分单元格与把一个单元格内容拆分到多个单元格...
- C语言if语句教学计划,c语言教学计划.doc
- 用Poi 转word docx 跟 doc 格式
- 4. 串的【朴素模式匹配算法】、【KPM算法:求next数组、nextval数组】
- REST API简介
- matlab 色温图,技术:图文教你了解色温及如何选择色温
- IT服务模式变迁影射新旧商业时代交替
- 从 Bridge 到 OVS,深度探索虚拟交换机
- 绕过Windows正版验证新方法