二刷尝试了别的办法,用MAP<Integer,set>代表关注列表。

然后不初始化,但是只要有用户被使用,而他又不在MAP里,就把他加进去,然后让他关注自己。。

但是这样做超时了。

问题在于这个题解法太多,有很多不同的情况。

STACK记录所有推,然后找10个,那太难了,可能某个用户关注的只是几亿里面的某些人,搜索起来很要命。

那可以某人发推,就给所有关注他的人推一下。A关注B的时候,A刷新自己的推特队列,按时间顺序重新查找。这样比较符合现状,但是假如我有几亿关注者,每发一个就要刷新所有人的列表,这个还好。但是,每多一个人关注我,他的列表就要重新构建,按照时间,那就要遍历他关注的所有人的所有推,也很要命。。

另外数组初始问题在现实不需要纠结。。谁注册给谁ID就行了。。。实际中不会存在后台接到了没注册ID账户的操作请求。。。

总之。。这个题就是各种tradeoff,给的限定条件越多越容易接近最好设计方案。如果面试,希望是面试官给出设计,自己能距离说出这种设计的利弊,否则基本给个设计方案都能指出不适用的条件。

public class Twitter
{
Stack<Integer> tweets = new Stack<>();
Map<Integer,Integer> tweetsMap = new HashMap<Integer,Integer>();
List<Set<Integer>> users = new ArrayList<Set<Integer>>(); /** Initialize your data structure here. */
public Twitter()
{
for(int i = 0; i < 1000;i++)
{
Set<Integer> tempSet = new HashSet<Integer>(1000);
tempSet.add(i);
users.add(new HashSet<Integer>(tempSet));
}
} /** Compose a new tweet. */
public void postTweet(int userId, int tweetId)
{ tweets.push(tweetId);
tweetsMap.put(tweetId,userId);
} /** Retrieve the 10 most recent tweet ids in the user's news feed. Each item in the news feed must be posted by users who the user followed or by the user herself. Tweets must be ordered from most recent to least recent. */
public List<Integer> getNewsFeed(int userId)
{
List<Integer> res = new ArrayList<>();
Stack<Integer> tempStk = new Stack<Integer>(); while(res.size() < 10)
{
if(tweets.size()==0) break;
int temptweetID = tweets.pop();
tempStk.push(temptweetID);
if(users.get(userId).contains(tweetsMap.get(temptweetID))) res.add(temptweetID); } while(!tempStk.isEmpty())
{
tweets.push(tempStk.pop());
}
return res;
} /** Follower follows a followee. If the operation is invalid, it should be a no-op. */
public void follow(int followerId, int followeeId)
{ users.get(followerId).add(followeeId); } /** Follower unfollows a followee. If the operation is invalid, it should be a no-op. */
public void unfollow(int followerId, int followeeId)
{ if(followerId != followeeId)
users.get(followerId).remove(followeeId); }
}

这个初始4000人的就很蠢。。自己都想抽自己。假如有10个用户就浪费了,有4001个用户就报错了。

但是不初始4000人,每次有相关用户活动都要检测是否存在,不存在就加超时了。其实我就想知道,没注册的用户哪来的ID,怎么去给服务器发操作请求。

355. Design Twitter的更多相关文章

  1. leetcode@ [355] Design Twitter (Object Oriented Programming)

    https://leetcode.com/problems/design-twitter/ Design a simplified version of Twitter where users can ...

  2. 【Leetcode】355. Design Twitter

    题目描述: Design a simplified version of Twitter where users can post tweets, follow/unfollow another us ...

  3. [LeetCode] 355. Design Twitter 设计推特

    Design a simplified version of Twitter where users can post tweets, follow/unfollow another user and ...

  4. 【LeetCode】355. Design Twitter 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  5. 355 Design Twitter 设计推特

    设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文.你的设计需要支持以下的几个功能:    postTweet(userI ...

  6. [leetcode]355. Design Twitter设计实现一个微博系统

    //先定义一个数据结构,代表一条微博,有两个内容:发布者id,微博id(代表微博内容) class TwitterData { int userId; int twitterId; public Tw ...

  7. [LeetCode] Design Twitter 设计推特

    Design a simplified version of Twitter where users can post tweets, follow/unfollow another user and ...

  8. leetcode 355 Design Twitte

    题目连接 https://leetcode.com/problems/design-twitter Design Twitte Description Design a simplified vers ...

  9. LeetCode "Design Twitter"

    A mix of hashmap, list and heap. struct Tw { Tw(long long pts, int tid) { ts = pts; tweetid = tid; } ...

随机推荐

  1. ios专题 - sandbox机制

    [原创]http://www.cnblogs.com/luoguoqiang1985 ios在安装APP时,把APP的偏好设置与数据放在sandbox里.sandbox通过一系列细颗粒度控制APP访问 ...

  2. 最小生成树之 prim算法和kruskal算法(以 hdu 1863为例)

    最小生成树的性质 MST性质:设G = (V,E)是连通带权图,U是V的真子集.如果(u,v)∈E,且u∈U,v∈V-U,且在所有这样的边中, (u,v)的权c[u][v]最小,那么一定存在G的一棵最 ...

  3. centos 6.0中文输入法的设置

    我的centos 6.0 是全英文,中间写代码需要用到中文注释,自己摸索了下,搞好了就做个记录. 1).开机进入桌面,左上角有Applications , Places, System三个可扩展通道, ...

  4. 网站开发常用jQuery插件总结(二)弹出层插件Lightbox_me

    网站开发过程中,为了增加网站交互效果,我们有时需要在当前页面弹出诸如登陆.注册.设置等窗口.而这些窗口就是层,弹出的窗口就是弹出层.jQuery中弹出层插件很多,但有些在html5+css3浏览器下, ...

  5. 转:Ext GridPanel根据条件显示复选框

    Ext GridPanel实现复选框选择框: var selectModel = new Ext.grid.CheckboxSelectionModel({ singleSelect : false ...

  6. 17173php招聘

    学历要求:大专工作经历:4年↑薪资待遇:面议工作地点:北京市 资深PHP工程师岗位职责\\\"1.独立负责公司互联网产品的开发与测试2.主导负责相关系统维护,确保系统运行稳定可靠3.主导推动 ...

  7. Android 开机过程PMS分析

    12-13 12:25:05.595 3253 3253 SystemServer !@Boot: Start PackageManagerService pm/PackageManagerServi ...

  8. Android 简单的FC

    直接贴log 01-02 08:17:56.589 I/ActivityManager( 312): Start proc com.android.providers.calendar for con ...

  9. 2015_WEB页面前端工程师_远程测题_东方蜘蛛_1

    请使用HTML+CSS实现如下效果: 1. 使用CSS Sprites,实现如图1效果,素材图片为: icons.png: 2. 使用脚本语言验证邮箱.密码的必填以及邮箱的合法性: 若验证失败,则出现 ...

  10. struts文件上传拦截器中参数的配置(maximumSize,allowedTypes ,allowedExtensions)问题

    <interceptor-ref name="fileUpload"> <param name="allowedTypes">image ...