Mini Twitter
2016-07-07 02:59
134 查看
Implement a simple twitter. Support the following method:
postTweet(user_id, tweet_text). Post a tweet.
getTimeline(user_id). Get the given user's most recently 10 tweets posted by himself, order by timestamp from most recent to least recent.
getNewsFeed(user_id). Get the given user's most recently 10 tweets in his news feed (posted by his friends and himself). Order by timestamp from most recent to least recent.
follow(from_user_id, to_user_id). from_user_id followed to_user_id.
unfollow(from_user_id, to_user_id). from_user_id unfollowed to to_user_id.
Example: postTweet(1, "LintCode is Good!!!") >> 1 getNewsFeed(1) >> [1] getTimeline(1) >> [1] follow(2, 1) getNewsFeed(2) >> [1] unfollow(2, 1) getNewsFeed(2) >> [][/code]
/** * 本代码由九章算法编辑提供。没有版权欢迎转发。 * - 九章算法致力于帮助更多中国人找到好的工作,教师团队均来自硅谷和国内的一线大公司在职工程师。 * - 现有的面试培训课程包括:九章算法班,系统设计班,九章强化班,Java入门与基础算法班, * - 更多详情请见官方网站:http://www.jiuzhang.com/ */ /** * 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 { class Node { public int order; public Tweet tweet; public Node(int o, Tweet t) { this.order = o; this.tweet = t; } } class SortByOrder implements Comparator { public int compare(Object obj1,Object obj2) { Node node1 = (Node) obj1; Node node2 = (Node) obj2; if (node1.order < node2.order) return 1; else return -1; } } private Map<Integer, Set<Integer>> friends; private Map<Integer, List<Node>> users_tweets; private int order; public List<Node> getLastTen(List<Node> tmp) { int last = 10; if (tmp.size() < 10) last = tmp.size(); return tmp.subList(tmp.size() - last, tmp.size()); } public List<Node> getFirstTen(List<Node> tmp) { int last = 10; if (tmp.size() < 10) last = tmp.size(); return tmp.subList(0, last); } public MiniTwitter() { // initialize your data structure here. this.friends = new HashMap<Integer, Set<Integer>>(); this.users_tweets = new HashMap<Integer, List<Node>>(); this.order = 0; } // @param user_id an integer // @param tweet 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); if (!users_tweets.containsKey(user_id)) users_tweets.put(user_id, new ArrayList<Node>()); order += 1; users_tweets.get(user_id).add(new Node(order, tweet)); 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 here List<Node> tmp = new ArrayList<Node>(); if (users_tweets.containsKey(user_id)) tmp.addAll(getLastTen(users_tweets.get(user_id))); if (friends.containsKey(user_id)) { for (Integer user : friends.get(user_id)) { if (users_tweets.containsKey(user)) tmp.addAll(getLastTen(users_tweets.get(user))); } } Collections.sort(tmp, new SortByOrder()); List<Tweet> rt = new ArrayList<Tweet>(); tmp = getFirstTen(tmp); for (Node node : tmp) { rt.add(node.tweet); } return rt; } // @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 here List<Node> tmp = new ArrayList<Node>(); if (users_tweets.containsKey(user_id)) tmp.addAll(getLastTen(users_tweets.get(user_id))); Collections.sort(tmp, new SortByOrder()); List<Tweet> rt = new ArrayList<Tweet>(); tmp = getFirstTen(tmp); for (Node node : tmp) rt.add(node.tweet); return rt; } // @param from_user_id an integer // @param to_user_id an integer // from user_id follows to_user_id public void follow(int from_user_id, int to_user_id) { // Write your code here if (!friends.containsKey(from_user_id)) friends.put(from_user_id, new HashSet<Integer>()); friends.get(from_user_id).add(to_user_id); } // @param from_user_id an integer // @param to_user_id an integer // from user_id unfollows to_user_id public void unfollow(int from_user_id, int to_user_id) { // Write your code here if (friends.containsKey(from_user_id)) friends.get(from_user_id).remove(to_user_id); } }
相关文章推荐
- css中消除浮动有哪些方式?
- Java构造方法的应用
- CSS中float布局用法
- 安装mysql时出错。无法初始化。 libstdc++.so.5
- 关于HTML标签的总结
- css中为什么经常见到img{dispaly:block}?
- 重构的认知(一)
- How to set a badge value on a UITabBarController item
- iOS KVC/KVO
- Java方法与主方法
- An article about hash function for hash table
- 《机器学习实战》读书笔记之k-近邻算法
- apache 三种工作模式的讲解
- Java 泛型 泛型数组
- Java类的一般形式
- 设计模式之工厂模式
- Primes Product
- Android音频实时传输与播放(三):AMR硬编码与硬解码
- ListView加CheckBox简单实现批量删除
- 终于写完了C语言的期末作业😂😂😂